如何使用python中的opencv从相机流中准确捕获关键帧?

如何使用python中的opencv从相机流中准确捕获关键帧?,python,video,opencv,camera,video-capture,Python,Video,Opencv,Camera,Video Capture,我正试图从一个网络摄像头中捕捉按键时的图像。下面的代码是成功的 import cv cv.NamedWindow("w1") camera = cv.CaptureFromCAM(-1) while True: key = cv.WaitKey(0); if key == 'q': break; image = cv.QueryFrame(camera) cv.Sho

我正试图从一个网络摄像头中捕捉按键时的图像。下面的代码是成功的

    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")
对于第一次按键,它可以正常工作。对于下一个向下键,即使移动了,也会显示与第一个帧非常接近的帧。几次按键后,它会变成实际的图像。我可以推断,在存储帧的地方存在某种缓冲区 我想知道是否有人可以帮助我在按键时获得精确的帧

我正在使用带有python接口的opencv。操作系统是ubuntu 11.04。对捕获帧的调用被发送到v4l库。我有一个集成的网络摄像头与我的戴尔笔记本电脑

我想知道是否有人能帮我解决这个问题


非常感谢

我建议您以稍微不同的方式尝试:

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()的调用中的更改:与其阻塞它,不如等待一段合理的时间。然后检查是否实际按下了某个键(键!=-1)


我应该注意到,您的代码在我的Mac OS X 10.6和OpenCV 2.3上运行。

@cesarbs,这是一种很好的方法,但问题是我们将不断检索帧,这将给系统带来负担。你有没有想过通过连续检索来实现这一点?谢谢。