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/ 下打开,修改文件中内容:
在这里插入图片描述

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

  • 6
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值