1. 现象
-
ROS默认的Python版本是3.3,但我系统安装的是OpenCV4.5
-
如果直接在pkg中使用cv_bridge和opencv4.5就会有问题。
- 会有一些undefined reference问题
-
参考资料:
-
注意,重新编译并不能解决问题
- kinetic版本下,用OpenCV4.5.0编译cv_bridge失败,原因没细看,感觉上是API改变导致的。
2. 解决
- 需要修改 cv_bridge 的 cmake 配置文件
/opt/ros/kinetic/share/cv_bridge/cmake/cv_bridgeConfig.cmake
# 修改头文件
#if(NOT "include;/opt/ros/kinetic/include/opencv-3.3.1-dev;/opt/ros/kinetic/include/opencv-3.3.1-dev/opencv " STREQUAL " ")
if(NOT "/usr/local/share/opencv4" STREQUAL " ")
set(cv_bridge_INCLUDE_DIRS "")
set(_include_dirs "include;/usr/local/include/opencv4;/usr/local/include;/usr/include")
#set(_include_dirs "include;/opt/ros/kinetic/include/opencv-3.3.1-dev;/opt/ros/kinetic/include/opencv-3.3.1-dev/opencv")
# 修改 so 文件路径
set(libraries "cv_bridge;/usr/local/lib/libopencv_core.so.4.5.0;/usr/local/lib/libopencv_imgproc.so.4.5.0;/usr/local/lib/libopencv_imgcodecs.so.4.5.0;/usr/local/lib/libopencv_calib3d.so.4.5.0;/usr/local/lib/libopencv_highgui.so.4.5.0")
# set(libraries "cv_bridge;/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_core3.so.3.3.1;/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgproc3.so.3.3.1;/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3.1")
- 修改
/opt/ros/kinetic/share/cv_bridge/cmake/cv_bridge-extras.cmake
#set(OpenCV_VERSION 3.3.1)
#set(OpenCV_VERSION_MAJOR 3)
#set(OpenCV_VERSION_MINOR 3)
#set(OpenCV_VERSION_PATCH 1)
#set(OpenCV_SHARED ON)
#set(OpenCV_CONFIG_PATH /opt/ros/kinetic/share/OpenCV-3.3.1-dev)
#set(OpenCV_INSTALL_PATH /opt/ros/kinetic)
set(OpenCV_VERSION 4.5.0)
set(OpenCV_VERSION_MAJOR 4)
set(OpenCV_VERSION_MINOR 5)
set(OpenCV_VERSION_PATCH 0)
set(OpenCV_SHARED ON)
set(OpenCV_CONFIG_PATH /usr/local/share/opencv4)
set(OpenCV_INSTALL_PATH /usr/local/)