回答

收藏

OpenCV摄像头VIDIOC_QUERYMENU解决方法

嵌入式系统 嵌入式系统 5776 人阅读 | 0 人回复 | 2014-06-05

本帖最后由 de6ian 于 2014-6-5 21:12 编辑

      下午在linux下编写一个摄像头的程序时遇到,虽然摄像头程序跑的很正常,不过qt creator下提示warning。之前在虚拟机里跑过相似的不过当时没有嵌入到qt里头,依赖gtk+图像库直接imshow出来,控制台也没有提示下面的warning。
  1. /home/debian/qtopia/build-CameraCap-unknown-Debug/CameraCap...
  2. VIDIOC_QUERYMENU: 无效的参数
  3. VIDIOC_QUERYMENU: 无效的参数
  4. VIDIOC_QUERYMENU: 无效的参数
  5. /home/debian/qtopia/build-CameraCap-unknown-Debug/CameraCap exited with code
复制代码
      谷歌了一番找到一个比较靠谱的patch方法。出错的地方位于opencv源码的module/highgui/src/cap_libv4l.cpp,修改处大致位于494行

  1. static void v4l2_scan_controls_enumerate_menu(CvCaptureCAM_V4L* capture)
  2. {
  3. //  printf (" Menu items:\n");
  4.   CLEAR (capture->querymenu);
  5. capture->querymenu.id = capture->queryctrl.id;
  6.   for (capture->querymenu.index = capture->queryctrl.minimum;
  7.        (int)capture->querymenu.index <= capture->queryctrl.maximum;
  8.        capture->querymenu.index++)
  9.   {
  10.     if (0 == xioctl (capture->deviceHandle, VIDIOC_QUERYMENU,
  11.                      &capture->querymenu))
  12.     {
  13.       //printf (" %s\n", capture->querymenu.name);
  14.     } else {
  15.         perror ("VIDIOC_QUERYMENU");
  16.     }
  17.   }
  18. }
复制代码
修改为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/





















分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条