如何在Python中使用opencv在按键时精确捕获摄像头流的一帧?
我想在按下某个键的时候,从摄像头捕捉一张图片。下面的代码可以成功实现这个功能:
import cv
cv.NamedWindow("w1")
camera = cv.CaptureFromCAM(-1)
while True:
key = cv.WaitKey(0);
if key == 'q':
break;
image = cv.QueryFrame(camera)
cv.ShowImage("w1", image)
cv.DestroyWindow("w1")
第一次按键的时候效果很好。但是在接下来的按键时,即使我移动了,捕捉到的画面还是和第一次很接近。经过几次按键后,才会显示出实际的画面。我推测可能是有某种缓存,用来存储这些画面。
我想知道有没有人能帮我在按键的时候捕捉到准确的画面。
我使用的是opencv,并通过python进行操作。我的操作系统是ubuntu 11.04。捕捉画面的请求是发送给v4l库的。我用的是戴尔笔记本自带的摄像头。
我希望有人能帮我解决这个问题。
非常感谢!
1 个回答
3
我建议你换个方式试试:
import cv
cv.NamedWindow("w1")
camera = cv.CaptureFromCAM(-1)
while True:
image = cv.QueryFrame(camera)
key = cv.WaitKey(33)
if key == 'q':
break
elif key != -1:
cv.ShowImage("w1", image)
cv.DestroyWindow("w1")
注意一下对cv.WaitKey()的调用方式变化:不要让它一直等着,而是等一个合理的时间。然后检查一下是否真的按下了某个键(key != -1)。
我还要提一下,你的代码在我的Mac OS X 10.6和OpenCV 2.3上是能正常工作的。