在python中打开cv。获取网络摄像头流有效,但会打印错误消息

2024-10-01 19:31:59 发布

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

我正在写一些东西,我需要网络摄像头流和做一些面部检测。一切正常,但我在终端中得到一条错误消息,尽管我使用了cv.CaptureFromCAM(-1)来检测连接到我的机器的任何摄像头。 我还尝试使用cv2而不是cv,得到了相同的错误:

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

请注意,我当前运行的唯一代码是cv.CaptureFromCAM(-1)。噢,我使用的是Python2.7。

 import cv
 cv.CaptureFromCAM(-1)

有人能告诉我怎么解决这个问题吗? 谢谢。


Tags: 代码import网络机器终端消息错误argument
2条回答

尝试:

    import cv
    cv.NamedWindow("Capture", 1)
    cap_1 = cv.CaptureFromCAM(-1)
    While True:
     Frame = cv.QueryFrame(cap_1)
     cv.ShowImage("Capture", Frame)
     cv.WaitKey(1)

此外,使用cv2和视频捕获:

from cv2 import *
cam = VideoCapture(0)   
s, img = cam.read()

编辑:我在搜索这个错误时发现了以下信息: 消息:“VIDIOC_QUERYMENU:Invalid argument”来自opencv cap_libv4l.cpp 文件。 “querymenu.id”值在枚举时仍设置有“V4L2_CTRL_FLAG_NEXT_CTRL” 菜单项。 下面的补丁解决了这个问题:

— OpenCV-2.3.1/modules/highgui/src/cap_libv4l.cpp   2011-09-12 20:41:29.000000000 +0200
+++ opencv/modules/highgui/src/cap_libv4l.cpp   2011-12-01 19:00:37.503761631 +0100
@@ -489,7 +489,7 @@
{
// printf (” Menu items:\n”);
CLEAR (capture->querymenu);
- capture->querymenu.id = capture->queryctrl.id;
+ capture->querymenu.id = capture->queryctrl.id & ~V4L2_CTRL_FLAG_NEXT_CTRL;
for (capture->querymenu.index = capture->queryctrl.minimum;
(int)capture->querymenu.index queryctrl.maximum;
capture->querymenu.index++)

我遇到了同样的错误信息。但在我的例子中,它们并不是致命的,只是表明python正在使用v4l2来探测对我的相机/操作系统组合无效的参数。

就我而言

>>> cap = cv2.VideoCapture(0)
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
...

但是

ret, frame = cap.read()

给出ret=true和帧的麻木图像。

在我的例子中,摄像机是罗技公司的高清网络摄像头C910。我在海滩上怒吼。

相关问题 更多 >

    热门问题