如何在Python中使用opencv在按键时精确捕获摄像头流的一帧?

2 投票
1 回答
2839 浏览
提问于 2025-04-16 21:28

我想在按下某个键的时候,从摄像头捕捉一张图片。下面的代码可以成功实现这个功能:

    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上是能正常工作的。

撰写回答