我注意到一种行为,我在documentation中没有找到答案
当我使用VideoCapture(0)从照相机捕获流时,检查下面的代码,我注意到一些帧被跳过,因为我在代码中加入了延迟
但当我播放视频时,它不会跳过帧
cap = cv2.VideoCapture(0)
#cap = cv2.VideoCapture("awesomevideo.mp4")
while True :
# Get a new frame from camera
retval, frame = cap.read()
time.sleep(1)
# Display images
cv2.imshow("frame", frame)
我是否正确理解了这种行为,或者这是我的代码的问题? 当然,这只是一个测试脚本,我在处理来自相机的流时注意到了这个问题,我的while循环将花费0.4s,然后它将抓取下一帧(中间跳过了一些),但当我保存相同的视频并决定进行脱机处理时,我注意到它不会跳过帧,即,它只是等待,直到我完成处理帧,给我下一个,而不是像相机只是抓住任何相机显示现在
您无法从真实世界获取所有帧。帧速率将是无限的,这是不可能的。相机在捕获持续时间和处理时间的限制下,尝试捕获尽可能多的帧。通过添加
sleep
,可以增加处理时间录制的视频具有来自真实世界的离散帧样本,这足以让我们感知流,就好像它无限流动一样。人眼每秒捕获24帧。如果视频的目的是用于鸟类,则帧速率应至少为80
知道了这些,应该很清楚为什么
VideoCapture
会像你说的那样。相机试图从现实世界中捕捉尽可能多的帧。至于录制的视频,您已经拥有了所有帧作为脚注,您应该使用} 的文件
cv2.waitKey(1)
而不是time.sleep(1)
之后的imshow
来显示。见^{相关问题 更多 >
编程相关推荐