ROS kinetic版本cv_bridge配置opencv2.4.9与默认opencv3冲突的问题

问题描述:

     目前我们学习ros开发普遍的配置是ubuntu14.04 ros indigo版本,但以后是有需要升级到ubuntu16.04 ros kinetic版本的。这几天在尝试在ros kinetic版本配置opencv2.4.9时遇到了opencv和kinetic的cv_Bridge包不兼容的问题,经过查阅博客和调试,问题解决,主要问题在于ros kinetic版本默认使用opencv3,而我们的人脸识别测试程序使用的是opencv2,在安装好opencv2.4.9后需要修改cv_bridge包中的关联opencv3的部分,记录如下:

    安装好opencv后使用catkin_make命令编译相关的人脸识别程序会出现可以找到opencv头文件,mat数据类型,但提示找不到opencv中的函数,首先可以确定的是opencv已经安装完成,测试用例完美运行,后来怀疑是人脸识别程序中cmakelist存在问题没有包含opencv库,发现网上的各种在cmakelist中添加opencv库的方法均没有效果(我自己的判断是没有必要在cmakelist中添加各种opencv的库,只要确保opencv安装成功,其余的工作会由ros中的cv_bridge包完成),后来在该篇文章中找到了解决办法:

ROS-Kinect cv_bridge的opencv版本兼容问题

解决办法:   

  其中我也认为改cmamkelist没有必要,关键在于ROS kinetic中的cv_bridge中默认使用自带opencv3,而我们人脸识别程序使用的是opencv2,而需要解决cv3和cv2不兼容的问题,解决办法很简单,那就是找到/opt/ros/kinetic/share/cv_bridge/cmake中的cv_bridgeConfig.cmake,使用sudo gedit打开,如上面的文章所说,将文件的94-96行改为原本的使用自带的opencv3的地方改为我们电脑上安装opencv的位置,原文件的94-96行如下所示:

第94-96行:
    if(NOT "include;/opt/ros/kinetic/include/opencv-3.1.0-dev/opencv;/opt/ros/kinetic/include/opencv-3.1.0-dev " STREQUAL " ")
      set(cv_bridge_INCLUDE_DIRS "")
      set(_include_dirs "include;/opt/ros/kinetic/include/opencv-3.1.0-dev/opencv;/opt/ros/kinetic/include/opencv-3.1.0-dev")

这里将其中的opt/ros/kinetic/include/opencv-3.1.0-dev改为我们自己安装的opencv的路径,与上面文章的不同的地方是,我修改后的文件如下:

第94-96行:
    if(NOT "include;/usr/local/include/opencv;/usr/include " STREQUAL " ")
      set(cv_bridge_INCLUDE_DIRS "")
      set(_include_dirs "include;include;/usr/local/include/opencv;/usr/include")

文章中在112行的修改如下:


#112行:set(libraries "cv_bridge;/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so;/usr/lib/x86_64-linux-gnu/libopencv_contrib.so;/usr/lib/x86_64-linux-gnu/libopencv_core.so;/usr/lib/x86_64-linux-gnu/libopencv_features2d.so;/usr/lib/x86_64-linux-gnu/libopencv_flann.so;/usr/lib/x86_64-linux-gnu/libopencv_gpu.so;/usr/lib/x86_64-linux-gnu/libopencv_highgui.so;/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so;/usr/lib/x86_64-linux-gnu/libopencv_legacy.so;/usr/lib/x86_64-linux-gnu/libopencv_ml.so;/usr/lib/x86_64-linux-gnu/libopencv_objdetect.so;/usr/lib/x86_64-linux-gnu/libopencv_ocl.so;/usr/lib/x86_64-linux-gnu/libopencv_photo.so;/usr/lib/x86_64-linux-gnu/libopencv_stitching.so;/usr/lib/x86_64-linux-gnu/libopencv_superres.so;/usr/lib/x86_64-linux-gnu/libopencv_ts.so;/usr/lib/x86_64-linux-gnu/libopencv_video.so;/usr/lib/x86_64-linux-gnu/libopencv_videostab.so")

在这里我们的路径在/usr/local/lib下,同理只要将上面的/usr/lib/x86_64-linux-gnu/路径改为自己的路径即可。

回到catkin_ws中,使用catkin_make编译成功。


你可能感兴趣的:(笔记,ROS,kinetic,opencv,cv_bridge)