我正在写一些我需要网络摄像头流并在其上进行面部检测的内容。一切正常,但我收到终端打印的错误信息,尽管我使用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)
。哦,我正在使用python 2.7。
import cv
cv.CaptureFromCAM(-1)
有人能告诉我如何解决这个问题吗? 感谢。
答案 0 :(得分:1)
我遇到了相同的错误消息。在我的情况下,它们并不致命,只是表明python正在使用v4l2来探测碰巧对我的相机/操作系统组合无效的参数。
就我而言
>>> cap = cv2.VideoCapture(0)
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
...
但是
ret, frame = cap.read()
给出ret = true和帧的numby图像。
在我的情况下,摄像机是Logitech,Inc。HD网络摄像头C910。我在beagleboneblack上运行Angstrom。
答案 1 :(得分:-1)
尝试:
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和VideoCapture:
from cv2 import *
cam = VideoCapture(0)
s, img = cam.read()
编辑:我在Google上搜索此错误时发现了以下信息: 消息:'VIDIOC_QUERYMENU:无效参数'来自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++)