OpenCV摄像头VIDIOC_QUERYMENU解决方法
嵌入式系统
5779 人阅读
|
0 人回复
|
2014-06-05
TA的每日心情 | 擦汗 2014-11-30 10:07 |
|---|
签到天数: 170 天 连续签到: 1 天 [LV.7]常住居民III
状元
- 积分
- 5153
|
本帖最后由 de6ian 于 2014-6-5 21:12 编辑
下午在linux下编写一个摄像头的程序时遇到,虽然摄像头程序跑的很正常,不过qt creator下提示warning。之前在虚拟机里跑过相似的不过当时没有嵌入到qt里头,依赖gtk+图像库直接imshow出来,控制台也没有提示下面的warning。
- /home/debian/qtopia/build-CameraCap-unknown-Debug/CameraCap...
- VIDIOC_QUERYMENU: 无效的参数
- VIDIOC_QUERYMENU: 无效的参数
- VIDIOC_QUERYMENU: 无效的参数
- /home/debian/qtopia/build-CameraCap-unknown-Debug/CameraCap exited with code
复制代码 谷歌了一番找到一个比较靠谱的patch方法。出错的地方位于opencv源码的module/highgui/src/cap_libv4l.cpp,修改处大致位于494行
- static void v4l2_scan_controls_enumerate_menu(CvCaptureCAM_V4L* capture)
- {
- // printf (" Menu items:\n");
- CLEAR (capture->querymenu);
- capture->querymenu.id = capture->queryctrl.id;
- for (capture->querymenu.index = capture->queryctrl.minimum;
- (int)capture->querymenu.index <= capture->queryctrl.maximum;
- capture->querymenu.index++)
- {
- if (0 == xioctl (capture->deviceHandle, VIDIOC_QUERYMENU,
- &capture->querymenu))
- {
- //printf (" %s\n", capture->querymenu.name);
- } else {
- perror ("VIDIOC_QUERYMENU");
- }
- }
- }
复制代码 修改为capture->querymenu.id = capture->queryctrl.id & ~V4L2_CTRL_FLAG_NEXT_CTRL;
最后,目前CV的本版出到2.4.9,不知道这个问题是否解决了,有下过最新版本的朋友可以打开源码看一下。本人所用是2.4.8,依照上述的patch需要再重新编译,由于工程浩大,先mark。
参考链接:http://www.ozbotz.org/opencv-install-troubleshooting/
|
|
|
|
|
|
|
|
|