解决ROS的cv_bridge与自己安装的opencv的版本冲突的问题

如果用ROS的topic传输图片,需要用到cv_bridge,这是个ros自带的opencv中的库,如果此时项目中引用了自己安装的opencv,自己安装的opencv会与ros自带的opencv中的cv_bridge冲突。编译时弹出warning: libopencv_imgproc.so.407, needed by /usr/local/lib/libopencv_features2d.so.4.7.0, may conflict with libopencv_imgproc.so.4.2。运行后 cv::imshow报Segmentation fault这个错误。

解决方法1:

修改/opt/ros/noetic/share/cv_bridge/cmake文件夹中的cv_bridgeConfig.cmake,ctrl+f 搜索“set(libraries“ 会看到cv_bridge所需要的库,这里面都是 .4.2.0的版本,将发生冲突的库改为自己的版本,比如我的是opencv4.8,就改为 .4.8.0,注意还有前面的路径一起改,4.8.0版本的这些库/usr/local/lib中,安装自己的opencv的时候安装到这里的。修改完后cv::imshow就不会报错了。

参考了这位博主的做法:解决Ubuntu环境下ROS Kinetic中的cv_bridge和自己安装OpenCV 2.4.xx兼容性笔记_ros安装opencv-CSDN博客

 解决方法二(推荐):

下载自己的ros对应版本的cv_bridge,https://github.com/ros-perception/vision_opencv

修改cv_bridge中的cmakelists.txt

find_package(OpenCV 3.4.10 REQUIRED) //改成你安装的opencv的版本

cmake单独编译cv_bridge

mkdir build
cd build
cmake ..
make
sudo make install

在你需要用cv_bridge的项目中的CMakeLists.txt中添加

set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake)  //在find_package前面

 这样就是引用了 引用你自己opencv的cv_bridge。

参考:解决cv_bridge和opencv之间版本匹配问题 - 知乎

你可能感兴趣的:(opencv,计算机视觉)