C++ 在Ubuntu-Opencv中选择超时错误

C++ 在Ubuntu-Opencv中选择超时错误,c++,c,ubuntu,opencv,webcam,C++,C,Ubuntu,Opencv,Webcam,我试图为我的最后一年项目设置OpenCv,但遇到了一些问题。在接下来的教程中,我成功地在Ubuntu中设置了它 我现在遇到的问题是保持这个程序运行。该程序是使用网络摄像头进行人脸检测 它可以正常运行3或4秒,然后捕获被窗口中的一个帧卡住。控制台显示以下输出 tom@ubuntu:~/College/opencv/faceDetect_sample$ make ./faceDetect --cascade="haarcascade_frontalface_alt.xml" --nested-cas

我试图为我的最后一年项目设置OpenCv,但遇到了一些问题。在接下来的教程中,我成功地在Ubuntu中设置了它

我现在遇到的问题是保持这个程序运行。该程序是使用网络摄像头进行人脸检测

它可以正常运行3或4秒,然后捕获被窗口中的一个帧卡住。控制台显示以下输出

tom@ubuntu:~/College/opencv/faceDetect_sample$ make
./faceDetect --cascade="haarcascade_frontalface_alt.xml" --nested-cascade="haarcascade_eye_tree_eyeglasses.xml"
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
init done 
opengl support available 
select timeout
select timeout
select timeout
select timeout
select timeout
select timeout
^Cmake: *** [run] Interrupt
如果有人知道从这里到哪里去,我真的非常感谢你的帮助

试试这个:

modprobe uvcvideo nodrop=1 timeout=6000
如果这样做有效,只需编辑/etc/modprobe.d/modprobe.conf使更改永久化即可

尝试将超时增加到一个可笑的大数字。这应该可以解决问题,或者至少对我有效。只是调用select没有返回就绪描述符,这可能是由视频驱动程序或设备驱动程序引起的

如果这不起作用

启用模块跟踪:

sudo echo 0xffff > /sys/module/uvcvideo/parameters/trace
运行程序直到发现错误,并尽快停止。然后禁用跟踪:

sudo echo 0 > /sys/module/uvcvideo/parameters/trace

使用
dmesg
搜索错误消息。

如果在代码中添加以下行,则可以解决此问题:

VideoCapture capture(<device id>);
capture.set(CV_CAP_PROP_FRAME_WIDTH , 352);
capture.set(CV_CAP_PROP_FRAME_HEIGHT , 288);
VideoCapture();
捕获设置(CV\U CAP\U PROP\U FRAME\U WITH,352);
捕捉设置(CV、帽、道具、框架、高度,288);
下面是一个很好的链接,详细介绍了解决方案:
我的Logitech C920也有同样的问题。我尝试了以下解决方案,但没有成功。然而,C930e网络摄像头的工作方式非常有魅力,因此我猜V4L API与此有关。

更新了更多信息,希望能有所帮助。您找到解决方案了吗?