【发布时间】:2018-10-31 12:42:43
【问题描述】:
我正在使用 OpenCV 3.4 和 Python 3 编写程序。我还使用 Raspberry pi 3 和 PiCamera。 我的问题是我必须每 2 或 3 秒处理一次从 picamera 实时录制的视频的最后一帧。
import cv2
from time import sleep
cam=cv2.VideoCapture(0)
while True:
suc, img=cam.read()
#operation on image, it's not important
cv2.imshow(...)
我有一个类似的代码。 这段代码工作得很好,但是树莓派继续处理视频的最后一帧,持续几秒钟。 我希望每 2 或 3 秒只处理 1 次。 我已经尝试在 while 循环中使用 time.sleep(2) 但它不起作用,因为那时视频不是实时的。我在互联网上搜索了很多,我认为 picamera 继续记录,当 2 秒过去后,我的程序处理之后的帧,而不是相机记录的最后一帧。 在互联网上,我找到了一个名为 VideoCapture.Grab 的函数,但我不明白它是如何工作的,以及是否必须使用它。 我发现这个问题与我的非常相似 How to capture a picture after every 5 seconds of camera using opencv python and Raspbery Pi 3? 但是代码的第二部分被剪切或类似,我无法理解。 谢谢大家。
【问题讨论】:
-
将
suc,img=cam.read()行放在time.sleep(2)行之后。 -
发布的答案是否解决了您的问题?
-
我认为这里的问题是 OpenCV 最多缓冲 5 帧,所以如果你没有阅读 2 秒,那么你之后阅读的前 4-5 帧将长达 2 秒.解决方案是不断调用
grab()以保持帧刷新。
标签: python-3.x opencv image-processing raspberry-pi