8

我正在尝试为我最后一年的项目设置 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

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

4

3 回答 3

14

试试这个:

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

于 2012-10-03T19:23:00.577 回答
4

如果我们在代码中添加以下几行,就可以解决它:

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/

于 2015-04-08T16:10:45.007 回答
1

我的罗技 C920 也有同样的问题。我尝试了以下解决方案但没有成功。但是,它与 C930e 网络摄像头一起工作就像一个魅力,所以我猜 V4L API 与它有关。

于 2015-05-27T09:09:10.723 回答