如果用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。文章来源:https://www.toymoban.com/news/detail-773964.html
参考:解决cv_bridge和opencv之间版本匹配问题 - 知乎文章来源地址https://www.toymoban.com/news/detail-773964.html
到了这里,关于解决ROS的cv_bridge与自己安装的opencv的版本冲突的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!