【问题标题】:Problems using webcam in python + openCV在 python + openCV 中使用网络摄像头的问题
【发布时间】:2012-07-05 04:38:29
【问题描述】:

我正在使用以下代码通过 o​​penCV + 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)

【问题讨论】:

  • 我得到了同样的错误,但它工作正常。我从网络摄像头获得了正确的图像输出。您的网络摄像头工作正常吗?你得到正确的图像了吗?
  • 对我来说也一样。但正如 Froyo 提到的,它工作正常并获得正确的图像。你明白了吗?
  • 好的,它显示在我创建的窗口中...但是出现了一个新问题,请参阅我对原始帖子所做的编辑...
  • 这与我的 Engg 最后一年项目的前一天晚上(重新安装后)出现的问题完全相同。我编写了另一个脚本来捕获图像并将其发送到 OpenCV。 :P

标签: python opencv webcam


【解决方案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)

【讨论】:

  • 您是否需要将 while 块下面的 2 行缩进? cv.WaitKey 等你按键
  • 这似乎无法修复VIDIOC_QUERYMENU: Invalid argument 的打印。你最后解决了吗?
【解决方案2】:

我相信你需要把

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

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

如果您希望能够通过按键退出,请在循环中测试 cv.WaitKey 并设置一个小超时。

【讨论】:

  • 谢谢,实际上我只是在研究了一些示例后才弄清楚...我非常感谢您的回复。
【解决方案3】:

对我来说,root 中的命令

xhost +

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

再见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多