我使用以下代码使用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)
答案 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 +
节省我的时间,注意关闭并打开新终端。
见。