我每秒要在视频中绘制一些点以进行对象跟踪。
我可以使用opencv的VideoCapture轻松阅读视频。但是,当我在视频帧上绘制一些圆时,与视频帧相比,绘制速度更快。
cap = cv2.VideoCapture('video.mp4')
radius = [None]*10
radius = (1,2)
radius.append((2,3))
radius.append((3,4))
radius.append((4,5))
radius.append((5,6))
while(cap.isOpened()):
ret, frame = cap.read()
for i in range(len(radius)):
cv2.circle(frame, radius[i], 5, (0,0,255), -1)
cv2.imshow('test', frame) # draw
each_second += 1
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
在这种情况下,我每帧画一个'n'圈。但是我想每秒画一次,我该怎么做?
答案 0 :(得分:1)
您只需将waitKey
的值设置为1000
就可以等待一秒钟。
答案 1 :(得分:0)
我不确定这是否可行,只是一个想法。
如果您知道视频的FPS,您可以只做一个计数器来判断经过了多少帧吗?
例如,如果您有60帧/秒的视频,则可以算出60帧来知道一秒钟过去了。
答案 2 :(得分:0)
我找到了解决方法:
cap = cv2.VideoCapture('video.mp4')
radius = [None]*10
radius = (1,2)
radius.append((2,3))
radius.append((3,4))
radius.append((4,5))
radius.append((5,6))
while(cap.isOpened()):
ret, frame = cap.read()
time_passed = int(cap.get(cv2.CAP_PROP_POS_MSEC))
if time_passed % 1000 ==0:
print(time_passed)
# draw circles
for i in range(len(radius)):
cv2.circle(frame, radius[i], 5, (0,0,255), -1)
cv2.imshow('test', frame) # draw
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()