【发布时间】:2017-09-25 16:29:29
【问题描述】:
我想连接到相机,并且仅在事件发生时(例如按键)捕获帧。我想做的一个简化版本是这样的:
cap = cv2.VideoCapture(device_id)
while True:
if event:
img = cap.read()
preprocess(img)
process(img)
cv.Waitkey(10)
但是,cap.read 似乎只捕获队列中的下一帧,而不是最新帧。我在网上做了很多搜索,似乎有很多关于此的问题,但没有明确的答案。只有一些肮脏的黑客行为涉及在抓取前后打开和关闭捕获设备(这对我不起作用,因为我的事件可能每秒触发多次);或假设一个固定的帧速率并在每个事件上读取固定的 n 次(这对我不起作用,因为我的事件是不可预测的并且可能在任何时间间隔发生)。
一个不错的解决方案是:
while True:
if event:
while capture_has_frames:
img = cap.read()
preprocess(img)
process(img)
cv.Waitkey(10)
但是 capture_has_frames 是什么?是否有可能获得该信息?我尝试查看 CV_CAP_PROP_POS_FRAMES 但它始终为 -1。
现在我有一个单独的线程,捕获以全 fps 运行,在我的活动中,我正在从该线程获取最新图像,但这似乎有点过头了。
(顺便说一句,我在 Ubuntu 16.04 上,但我想应该没关系。我也在使用 pyqtgraph 进行显示)
【问题讨论】:
标签: python opencv camera video-capture opencv3.0