ROS与新版本opencv的兼容
总所周知,当我们在ros中使用opencv加载onnx文件时可能会遇到加载模型失败的情况,这大概率是因为ros-noetic自带的ros版本是4.2.0 ,版本太低导致的,这时候就需要使用新版本的opencv。1. 按下“ctrl + F”搜索include就可以很快找到,将原来的注释掉,红线部分改为自己下载好的新版本的opencv的对应路径。防止你们认错,这里的路径下文件长这样(注意,这一步不要
如何下载新版本opencv见笔者的上一篇文章(传送门)。
这里以ros-noetic和opencv4.8.1为例,默认已经实现了opencv新版本的安装。
本文章引用自这篇:
解决Ubuntu环境下ROS Kinetic中的cv_bridge和自己安装OpenCV 2.4.xx兼容性笔记_ros kinetic opencv-CSDN博客
话不多说直接开始吧。
总所周知,当我们在ros中使用opencv加载onnx文件时可能会遇到加载模型失败的情况,这大概率是因为ros-noetic自带的opencv版本是4.2.0 ,版本太低导致的,这时候就需要使用新版本的opencv。
那么聪明的小伙伴就要发问了,如果我还需要使用cv_bridge进行cv图像和ros消息之间的转换怎么办?因为opencv版本是不能同时加载两个的,所以会导致报错(当cmakelist中存在cv_bridge时,会默认优先调用opencv4.2.0)。
此处采用的办法是修改cv_bridge的配置文件,使其强制调用我们自己下载的新版本opencv。
首先找到cv_bridge的配置文件(大概率是在这里)
cd /opt/ros/noetic/share/cv_bridge/cmake
sudo gedit cv_bridgeConfig.cmake
要修改的地方有两处
1. 按下“ctrl + F”搜索include就可以很快找到,将原来的注释掉,红线部分改为自己下载好的新版本的opencv的对应路径。
防止你们认错,这里的路径下文件长这样(注意,这一步不要写成了clone下来的仓库里的对应路径,一定要是自己指定安装位置的对应路径)
2. 搜索“lib”就可以很快找到这一坨,这里全部替换成自己安装路径下的库文件(其中所有以.so.4.8.1为后缀的文件即可)
对应路径的文件夹长这样
因为这段比较长,所以提供一份示例,有需要的自己修改后使用即可
set(libraries "cv_bridge;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_calib3d.so.4.8.1;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_core.so.4.8.1;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_dnn.so.4.8.1;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_features2d.so.4.8.1;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_flann.so.4.8.1;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_gapi.so.4.8.1;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_highgui.so.4.8.1;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_imgcodecs.so.4.8.1;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_imgproc.so.4.8.1;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_ml.so.4.8.1;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_objdetect.so.4.8.1;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_photo.so.4.8.1;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_stitching.so.4.8.1;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_video.so.4.8.1;/home/lovod/opencv-4.8.1/build/installed/lib/libopencv_videoio.so.4.8.1")
接下来开始修改第二份文件,同样是该目录下
sudo gedit cv_bridge-extras.cmake
修改红框部分即可
对应的路径文件夹页面如下
到这里就圆满结束了!!!
测试一下
ROS_WARN("Compiled with OpenCV %s", CV_VERSION);
if (getVersionMajor() != CV_MAJOR_VERSION || getVersionMinor() != CV_MINOR_VERSION)
{
ROS_FATAL("OpenCV version mismatch! Compiled with %d.%d but runtime is %s",CV_MAJOR_VERSION, CV_MINOR_VERSION, cv::getVersionString().c_str());
ros::shutdown();
}
ROS_WARN("Linked OpenCV version: %d.%d.%d",
CV_MAJOR_VERSION,
CV_MINOR_VERSION,
CV_SUBMINOR_VERSION);
ROS_WARN("Runtime OpenCV version: %s", cv::getVersionString().c_str());
成功啦!!!完结撒花!!!
更多推荐
所有评论(0)