5

我正在使用以下代码使用 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。

{编辑}

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

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)
4

3 回答 3

1

哇,在我发布这篇文章后,我在 15 岁时回答了我自己的问题。我做了一些研究,网络摄像头只抓取一张图像的原因是...

cv.WaitKey(-1)

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

cv.WaitKey(10)

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

这是显示网络摄像头提要的完整代码

import cv

cv.NamedWindow("webcam", 1)

cam = cv.CaptureFromCAM(-1)

While True:
feed = cv.QueryFrame(cam)
cv.ShowImage("webcam", feed)
cv.WaitKey(1)
于 2012-07-06T05:51:29.640 回答
0

我相信你需要把

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

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

如果您希望能够通过按键退出,也可以cv.WaitKey在循环中使用小超时进行测试。

于 2012-07-06T05:50:41.907 回答
0

对我来说,root中的命令

主机+

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

再见。

于 2016-10-28T21:57:06.780 回答