[英]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.