在视频中每秒画一个圆圈

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()

【讨论】:

以上是关于在视频中每秒画一个圆圈的主要内容,如果未能解决你的问题,请参考以下文章

试图在 LibGDX 中画一个圆圈

如何在图像上画一个圆圈

如何在html页面中画圆圈?

如何在鼠标单击时在 FigureCanvasQTAgg 上画一个圆圈

画一个圆圈,用不同的颜色填充不同的部分

在 UIImageView 上画一个简单的圆圈