OpenCV摄像头VIDIOC_QUERYMENU解决方法
嵌入式系统
 
5776 人阅读
|
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/ 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 |   
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 |