ros kinetic带的cv_bridge是基于opencv3.x的,在一些已有的工程项目中需要继续使用opencv2.X。当两个版本opencv共存时,即使修改/opt/ros/kinetic/share/cv_bridge/cmake中的cv_bridgeConfig.cmake,可以成功编译,在程序运行到cv_bridge的一些函数时依然存在错误。因为cv_bridge依赖d库是在opencv3.x下编译的,此时需要把ros涉及的所有opencv统一版本。方法如下:
1.把旧的cv_bridge卸载:
sudo apt-get remove ros-kinetic-cv-bridge
2.重新下一个cv_bridge,建议还是下载kinetic版本的:
https://github.com/ros-perception/vision_opencv/tree/kinetic
或者在终端运行
git clone https://github.com/ros-perception/vision_opencv.git
3.修改cv_bridge中的cmakelists.txt
将之前的:
find_package(OpenCV 3 REQUIRED
COMPONENTS
opencv_core
opencv_imgproc
opencv_imgcodecs
CONFIG
)
修改为:
set(OpenCV_DIR /usr/local/opencv2.4.13.1/share/OpenCV)#此处修改为你的opencv share地址
find_package(OpenCV 2.4.13.1 EXACT REQUIRED)
4.重新编译cv_bridge包:
cd ~/catkin_ws/src/cv_bridge
mkdir build
cd build
cmake ..
make
sudo make install
编译时会出错,需要把cv_bridge/src/cv_bridge.cpp中的
#include <opencv2/imgcodecs.hpp>
替换为
#include <opencv2/highgui/highgui.hpp>
即可。
由于以前的cv_bridge卸载了,在cmakelists.txt中需要添加一句话,
set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake)
//在find_package前面
查找cv_bridge.config.cmake的路径。
5.python调用cv_bridge时,需要在~/.bashrc中添加
export LD_LIBRARY_PATH=/usr/local/lib/