如何在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库。我的戴尔笔记本电脑有一个集成的网络摄像头。

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

Thanks to lot

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

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。

相关内容

  • 没有找到相关文章

最新更新