在视频中每秒画一个圆圈
Posted
技术标签:
【中文标题】在视频中每秒画一个圆圈【英文标题】:Draw a circle every second in a video 【发布时间】:2019-01-23 13:41:28 【问题描述】:我每秒要在视频中绘制一些点以进行对象跟踪。
我可以使用来自 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”个圆圈。但我想每秒画一次,我该怎么做?
【问题讨论】:
【参考方案1】:您可以简单地将waitKey
值设置为1000
以等待一秒钟。
【讨论】:
我发现我只是添加了以下几行:time_passed = int(cap.get(cv2.CAP_PROP_POS_MSEC)) if time_passed % 1000 ==0: print(time_passed)【参考方案2】:我不完全确定这是否可能,只是一个想法。
如果您知道视频的 FPS,您是否可以制作一个计数器来判断一秒是否过去了多少帧?
例如,如果您有一个 60 FPS 的视频,您可以数 60 帧来知道一秒钟过去了。
【讨论】:
谢谢,是的,这可能对我很有效:)(检查问题以获取解决方案)对不起,我不知道如何单独添加解决方案【参考方案3】:我得到了解决方案:
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()
【讨论】:
以上是关于在视频中每秒画一个圆圈的主要内容,如果未能解决你的问题,请参考以下文章