Ubuntu18.04+ROS melodic+opencv4 修改cv_bridge配置文件,解决ROS使用不同版本opencv的冲突问题

问题

在如标题所示配置下运行开源代码时,opencv中的某些函数无法正常使用,例如imshow无法显示灰度图像,distanceTransform报错等,使用时会报如下错误

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/color.cpp, line 9716
terminate called after throwing an instance of ‘cv::Exception’
what(): /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/color.cpp:9716: error: (-215) scn == 3 || scn == 4 in function cvtColor

这是因为ROS自带的opencv版本为3.2.0,在安装opencv4后导致使用不同版本的opencv报错,需要给ROS指定统一版本的opencv,解决方法是修改cv_bridge配置文件,使ROS去调用自己安装的opencv版本。
参考: http://www.bubuko.com/infodetail-3737196.html.

修改cv_bridge文件

可以直接去看这个大佬:https://blog.csdn.net/bigdog_1027/article/details/79092263.

首先找到cv_brige文件,使用gedit打开

cd /opt/ros/melodic/share/cv_bridge/cmake/ 
sudo gedit cv_bridgeConfig.cmake  

将此处指定的头文件目录改到自己安装的头文件目录下
在这里插入图片描述
之后再将指定库文件也修改为自己安装的opencv库文件
在这里插入图片描述
与头文件直接写入目录的方式不同,库文件是将文件本身写入到配置文件中,库文件有很多,只需写入几个核心常用的即可,后续用到其他的可以添加。

修改完cv_bridge配置文件后,在CMakeLists文件中使用find_package找到cv_bridge,就可以在工程中使用自己的opencv版本。

find_package(

cv_bridge

)

还可以通过修改cv_bridge-extras.cmake文件使编译时输出正确的版本号和路径(具体原因参考上方链接),修改与否对使用opencv无影响。
同样是在 /opt/ros/melodic/share/cv_bridge/cmake/ 下打开,修改文件中内容:
Ubuntu18.04+ROS melodic+opencv4 修改cv_bridge配置文件,解决ROS使用不同版本opencv的冲突问题_第1张图片

万分感谢
https://blog.csdn.net/bigdog_1027/article/details/79092263.
http://www.bubuko.com/infodetail-3737196.html.

你可能感兴趣的:(SLAM学习,opencv)