查看: 4722|回复: 0

OpenCV摄像头VIDIOC_QUERYMENU解决方法

[复制链接]
  • TA的每日心情
    擦汗
    2014-11-30 10:07
  • 签到天数: 170 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-6-5 21:10:37 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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/





















    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-4-19 13:49 , Processed in 0.110756 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.