一、问题描述
在Ubuntu18.04+ROS+OpenCV4.5.x环境下编写简单代码测试OpenCV。在调用catkin_make编译后报错如下。
Failed to load module "xxxxxxxxxxxxxxxxxx" terminate called after throwing an instance of 'cv::Exception'
出现的问题是ROS无法调用部分OpenCV函数。原因是自己手动安装了OpenCV4.5.x等其他非ROS自带的版本。ROS在调用时出错。由于cv_bridge是OpenCV图像与ROS图像转换的桥梁。因此需要修改cv_bridge的有关配置文件使ROS去调用自己安装的OpenCV版本。
二、解决方法
打开终端并进入cv_bridge配置文件所在目录,并用gedit指令打开该配置文件。终端输入如下
cd /opt/ros/melodic/share/cv_bridge/cmake/
sudo gedit cv_bridgeConfig.cmake
第一处将头文件指定到自己安装的文件目录下
if(NOT "include;/usr/include;/usr/include/opencv;/usr/include/opencv2 " STREQUAL " ")
set(cv_bridge_INCLUDE_DIRS "")
set(_include_dirs "include;/usr/include;/usr/include/opencv")
第二处将库文件指定到自己安装的文件目录下
set(libraries "cv_bridge;/usr/local/lib/libopencv_core.so.4.5.3;/usr/local/lib/libopencv_imgproc.so.4.5.3;/usr/local/lib/libopencv_imgcodecs.so.4.5.3;/usr/local/lib/libopencv_calib3d.so.4.5.3;/usr/local/lib/libopencv_highgui.so.4.5.3")
修改版本后可套用。保存后即可。
在我们修改cv_bridge的配置文件后,只需要在我们所建立的工程包的CMakeLists.txt内的find_package语句中加入cv_bridge和OpenCV REQUIRED。
find_package(catkin REQUIRED COMPONENTS
cv_bridge
OpenCV REQUIRED
roscpp
)