ubuntu16.04中opencv和cv_bridge多版本共存问题

依赖项安装:

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

opencv的多版本共存:

1、opencv所有版本下载:https://github.com/opencv/opencv/releases

如果需要opencv_contrib模块,可以找到下载地址:https://github.com/opencv/opencv_contrib/releases

需要注意两个版本一定相同,不然没法一起编译成功。当然如果你只需要opencv,那么就看需要什么版本了

2、多版本共存:

mkdir build
cd build 

1、cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ ..

2、cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.3.1 -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ ..

其中1表示的是默认安装路径,如果不需要使用opencv_contrib,去掉就行。2表示使用自己的路径,/usr/local/opencv3.3.1,如果你要使用自己设置的路径下的opencv 版本,只需要在CMakeLists.txt文件中的find_package(OpenCV 3.3.1 REQUIRED)前面添加

SET(OpenCV_DIR "/usr/local/opencv3.3.1/share/OpenCV")

就可以了。

ros中的cv_bridge链接opencv:

在ubuntu16.04中安装ros时默认链接的是opencv3.3.1,并且是没有cuda加速的。如果需要在编译ros程序时使用带cuda编译的opencv,或是其他版本的opencv,就需要重新安装cv_bridge,具体如下:

首先是下载地址:https://github.com/ros-perception/vision_opencv

需要注意这个分支是不是需要的版本,如果不是,切换一下。

(1)链接opencv2需要注意:

需要把cv_bridge/src/cv_bridge.cpp中的#include 替换为#include

因为opencv2中没有

(2)链接opencv:

在cv_bridge文件夹中的CMakeLists.txt进行修改,以opencv3.3.1为例,进行如下修改:

find_package(OpenCV 3 REQUIRED
  COMPONENTS
    opencv_core
    opencv_imgproc
    opencv_imgcodecs
  CONFIG
)

替换为:

set(OpenCV_DIR /usr/local/opencv3.3.1/share/OpenCV)#此处修改为你的opencv share地址
find_package(OpenCV 3.3.1 EXACT REQUIRED)

(3)安装,进入cv_bridge文件夹:

mkdir build
cd build

1、cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. 
2、cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/cv_bridge_331 .. 

1是默认,2是自己设置其他路径。

使用的话,凡是ros编译中使用了cv_bridge的CMakeLists.txt,如果你要使用其它的opencv版本,就需要指定cv_bridge的路径。下面给出全部的默认路径和自己设置路径下的opencv和cv_bridge链接:

1、set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake)  //在find_package前面
SET(OpenCV_DIR "/usr/local/share/OpenCV")
find_package(OpenCV 3.3.1 REQUIRED)

2、set(cv_bridge_DIR /usr/local/cv_bridge_331/share/cv_bridge/cmake) //在find_package前面
SET(OpenCV_DIR "/usr/local/opencv3.3.1/share/OpenCV")
find_package(OpenCV 3.3.1 REQUIRED)

 

你可能感兴趣的:(ubuntu)