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

2024-10-01 19:25:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用下面的代码访问我的网络摄像头使用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)

Tags: 代码import网络feedargumentcv摄像头cam
3条回答

我相信你需要

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

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

如果您想通过按键退出,也可以在循环中使用小超时来测试cv.WaitKey

哇,我发了这个帖子后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)

对我来说,根目录中的命令

xhost+

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

再见。

相关问题 更多 >

    热门问题