在Ubuntu中选择Timeout错误 - Opencv

时间:2012-10-03 19:10:36

标签: c++ c ubuntu opencv webcam

我正在尝试为我的最后一年项目设置OpenCv并遇到了一些问题。我在this教程之后成功地在Ubuntu中设置了它。

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

它可以运行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

如果有人知道从哪里开始,我真的很感激一些帮助!

3 个答案:

答案 0 :(得分:13)

试试这个:

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搜索错误消息。

答案 1 :(得分:3)

如果我们在代码中添加以下行,可以解决这个问题:

VideoCapture capture(<device id>);
capture.set(CV_CAP_PROP_FRAME_WIDTH , 352);
capture.set(CV_CAP_PROP_FRAME_HEIGHT , 288);

以下是一个很好的链接,详细解释了解决方案: http://derekmolloy.ie/beaglebone/beaglebone-video-capture-and-image-processing-on-embedded-linux-using-opencv/

答案 2 :(得分:1)

我的Logitech C920遇到了同样的问题。我尝试了以下解决方案,没有任何成功。然而,它就像C930e网络摄像头的魅力一样,所以我猜V4L API与它有关。