在机器人、无人机项目中会用到ROS,linux下安装ROS时,cv_bridge默认连接的opencv版本是4.0+。但。。。
很多开源项目支持的opencv版本是2.0+、3.0+,会导致编译失败。
比如:error: ‘CV_RGB2GRAY’ was not declared in this scope
那就需要安装新版本的opencv,并且让cv_bridge和新版本opencv正常连接匹配。
网上大多数经验都是让你找到cv_bridge的cmake文件,修改opencv新版本的路径,
但这种方法治标不治本,在很多情况下尤其是代码执行时,依然会报错:
error while loading shared libraries: libopencv_imgcodecs.so.4.2: cannot open shared object file: No such file or directory
或警告:
warning: ../../lib/libopencv_imgproc.so, needed by ../lib/libcv_bridge.so, not found (try using -rpath or -rpath-link)
究其原因,是因为在安装ROS时,cv_bridge默认连接了4.0+版本的opencv进行编译。只修改cvbridgeConfig.cmake
中opencv的路径,编译可能没问题,但在代码执行时如果引用到libcv_bridge.so
,还是会链接到opencv原来的版本。
所以,解决这个问题最根本的方法,卸载旧的cv_bridge,安装好新版本opencv,然后重新编译新的cv_bridge。
安装步骤:
1.卸载原来版本的cv_bridge
sudo apt-get remove ros-melodic-cv-bridge
2.下载新版本cv_bridge
浏览器打开
https://github.com/ros-perception/vision_opencv
选择noetic对应的cv_bridge,
或者直接,
git clone https://github.com/ros-perception/vision_opencv/tree/melodic
3.修改cv_bridge中的cmakelists.txt
find_package(OpenCV 3.4.10 REQUIRED) //改成你安装的opencv的版本
4.cmake单独编译cv_bridge
在cv_bridge文件夹下,
mkdir build cd build cmake .. make sudo make install
5.在开源代码需要的cmaklist.txt中添加cv_bridge的cmake路径
set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake) //在find_package前面
比如,在vinsfusion开源SLAM代码中,只需要在loop_fusion和vins_estimator两个子模块的cmakelist.txt开头添加set,即可完美编译通过。