在python + openCV中使用网络摄像头的问题

时间:2012-07-05 04:38:30

标签: python opencv webcam

我使用以下代码使用openCV + python访问我的网络摄像头......

import cv

cv.NamedWindow('webcam_feed', cv.CV_WINDOW_AUTOSIZE)

cam = cv.CaptureFromCAM(-1)

然后我在控制台中收到以下错误......

VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument

我最初使用的,

cv.CaptureFromCAM(0)

访问相同的问题并使用相同的问题并使用-1,因为它假设选择任何网络摄像头。

我还测试了Ubuntu是否识别网络摄像头,但确实如此。我正在使用v4l2进行网络摄像头。

{编辑}

我使用以下代码显示视频Feed,它似乎只显示网络摄像头捕获的一个图像,而不是连续的视频输入...

import cv
cv.NamedWindow('webcam_feed', cv.CV_WINDOW_AUTOSIZE)
cam = cv.CaptureFromCAM(-1)
feed = cv.QueryFrame(cam)
cv.ShowImage("webcam_feed", feed)
cv.WaitKey(-1)

3 个答案:

答案 0 :(得分:1)

WOW,在我发帖后回答了我自己的问题。我做了一些研究,网络摄像头只抓取一张图像的原因是因为......

cv.WaitKey(-1)

这不允许刷新窗口的内容。我将数字设置为10 ......

cv.WaitKey(10)

它工作得很漂亮。我也尝试了100,但没有看到任何区别。我只看到数字为1000时的差异。我使用1,因为它似乎运行得最顺畅。

以下是显示网络摄像头Feed的完整代码

import cv

cv.NamedWindow("webcam", 1)

cam = cv.CaptureFromCAM(-1)

While True:
feed = cv.QueryFrame(cam)
cv.ShowImage("webcam", feed)
cv.WaitKey(1)

答案 1 :(得分:0)

我相信你需要把

frame = cv.QueryFrame(cam)
cv.ShowImage("Webcam Feed", frame)

循环中不断更新窗口中显示的图像。也就是说,来自cv.QueryFrame的帧是静态图像,而不是连续视频。

如果您希望能够通过按键退出,请在循环中以小超时测试cv.WaitKey

答案 2 :(得分:0)

对我来说,root中的命令

xhost +

节省我的时间,注意关闭并打开新终端。

见。