【问题标题】: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”个圆圈。但我想每秒画一次,我该怎么做?

【问题讨论】:

    标签: python opencv image-processing computer-vision


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-12
      • 2014-11-15
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      相关资源
      最近更新 更多