Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在视频中每秒画一个圆圈_Python_Opencv_Image Processing_Computer Vision - Fatal编程技术网

Python 在视频中每秒画一个圆圈

Python 在视频中每秒画一个圆圈,python,opencv,image-processing,computer-vision,Python,Opencv,Image Processing,Computer Vision,我有一些点要绘制在视频每秒的对象跟踪 我可以使用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()):

我有一些点要绘制在视频每秒的对象跟踪

我可以使用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”个圆圈。但是我想每秒钟画一次,我怎么能画呢

您只需将
waitKey
值设置为
1000
即可等待一秒钟。

我不完全确定这是否可行,只是想一想

如果你知道视频的FPS,你能做一个计数器来判断一秒钟是否经过多少帧吗

例如,如果你有一个每秒60帧的视频,你可以数到60帧就知道一秒钟过去了。

我得到了解决方案:

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

我明白了,我只是简单地添加了以下几行:time_passed=int(cap.get(cv2.cap_PROP_POS_MSEC))如果time_passed%1000==0:print(time_passed)谢谢,是的,这可能对我非常有效:)(检查问题以获得解决方案)对不起,我不知道如何单独添加解决方案