简体   繁体   English

如何使用 opencv 在视频上绘制尾随线

[英]How to draw trailing line on a video using opencv

Im trying to draw a path using dots on the video during certain timestamp interval.我试图在特定时间戳间隔内使用视频上的点绘制路径。 The code is working fine but the previous position of the dot dissapears, I dont want it to dissapear.代码运行良好,但之前的 position 消失了,我不想让它消失。 Can anyone help me as to what to tweak in this code to preseve all the dots.任何人都可以帮助我在此代码中进行哪些调整以保留所有点。

from collections import deque
from imutils.video import VideoStream
import numpy as np
import cv2
import imutils
import time
from numpy import random

vs = cv2.VideoCapture('/media/intercept.mp4')
pts = deque(maxlen=64) #buffer size

#Position to start drawing the dots
i=0
j=330
# keep looping
while True:
    ret,frame = vs.read()

    if frame is None:
        break
    # resize the frame, blur it, and convert it to the HSV color space
    frame = imutils.resize(frame, width=1800)
    blurred = cv2.GaussianBlur(frame, (11, 11), 0)
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    i+=2
    j=j-random.randint(-10,10) #introduce some jitter/randomness
    i=i+random.randint(-10,10)

    timestamps = vs.get(cv2.CAP_PROP_POS_MSEC)
    if (15000<timestamps<20000):
        print (i,j, "DRAWING")
        cv2.circle(frame,(i, j),10, (0,0,255), -1) #draw dot


    cv2.imshow("Frame", frame)
    key = cv2.waitKey(1) & 0xFF
    # if the 'q' key is pressed, stop the loop
    if key == ord("q"):
        break

cv2.destroyAllWindows()
vs.release()    

Was able to fix this one能够修复这个

from collections import deque
from imutils.video import VideoStream
import numpy as np
import cv2
import imutils
import time
from numpy import random

vs = cv2.VideoCapture('/media/intercept.mp4')
pts = deque(maxlen=64) #buffer size
color = np.random.randint(0,255,(100,3))
ret, old_frame = vs.read() 
old_frame = imutils.resize(old_frame,width=1800)
mask = np.zeros_like(old_frame)

i=0
j=330
ct=0
# keep looping
while True:
    ret,frame = vs.read()

    if frame is None:
        break
    # resize the frame, blur it, and convert it to the HSV color space
    frame = imutils.resize(frame, width=1800)
    blurred = cv2.GaussianBlur(frame, (11, 11), 0)
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    x=i
    y=j
    i+=2
    j=j-random.randint(-10,10)
    i=i+random.randint(-10,10)
    print (int(i%330))
    ct+=10

    timestamps = vs.get(cv2.CAP_PROP_POS_MSEC)
    if (1000<timestamps<20000):
        print (i,j, "Drawing")
        #cv2.circle(frame,(i, j),10, (0,0,255), -1) #draw circle
        mask = cv2.line(mask, (x,y),(i,j),[255,0,9], 2)
        frame = cv2.circle(frame,(i,j),5,[0,255,222],-1)

    img = cv2.add(frame,mask)
    cv2.imshow("Frame", img)
    key = cv2.waitKey(1) & 0xFF
    # if the 'q' key is pressed, stop the loop
    if key == ord("q"):
        break

cv2.destroyAllWindows()
vs.release()    

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM