由於在安裝ROS時自帶的版本是opencv2.4.8的,這幾天調試程序需要使用opencv3.1.0的版本,這就需要opencv多版本的共存,在網上搜集了很多資料,結合自己安裝的過程記錄一下:
使用命令查看當前的opencv版本:
pkg-config --modversion opencv
ROS系統自帶的是opencv-2.4.8
安裝opencv3.1
–首先下載新版本的opencv安裝包,之後解壓,安裝opencv的依賴項。
1、從OpenCV官網上下載OpenCV官網上下載OpenCV的未編譯源代碼:opencv官網下載
2、國內很多網絡打開OpenCV官網速度緩慢,可以點擊如下地址直接從GitHub上下載OpenCV 3.1的源代碼:giuhub地址
sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev libtbb-dev
–進入解壓後的opencv安裝包,新建目錄,目錄名爲build,並進入該目錄
mkdir build && cd build
輸入命令
cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_TBB=ON -D WITH_V4L=ON -D CMAKE_INSTALL_PREFIX=/usr/local/opencv310 ..
make
sudo make install
在這裏,我將opencv3.1的安裝目錄放在了/usr/local/opencv310文件夾
緊接着需要配置下文件,通過修改bashrc文件來設置PKG_ CONFIG_PATH(後來發現好像還需要改一下LD_LIBRARY_PATH)
sudo gedit ~/.bashrc
在文件末尾加上
export PKG_CONFIG_PATH=/usr/local/opencv310/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv310/lib
保存之後,再使用命令
source ~/.bashrc
這時候使用
pkg-config --modversion opencv
命令,opencv版本已經變成3.1了
配置 當你使用的是cmake工具時,在Cmakelist中加入路徑即可使用opencv3.1,當你想返回使用opencv2時,將
find_package(OpenCV 3.1 REQUIRED )
換成find_package(OpenCV REQUIRED )
即可,其餘刪除。
#find_package(OpenCV REQUIRED) #使用opencv2
cmake_minimum_required(VERSION 2.8) #要求>2.8的版本
set(OpenCV_DIR /usr/local/opencv310/share/OpenCV)
find_package( OpenCV 3.1 REQUIRED ) #使用opencv3.1
#if(NOT OpenCV_FOUND)
# find_package(OpenCV 3.1.0 QUIET)
# if(NOT OpenCV_FOUND)
# message(FATAL_ERROR "OpenCV > 3.0.0 not found.")
# endif()
#endif()
include_directories(${OpenCV_INCLUDE_DIRS} /usr/local/opencv310/include)
find_package( "/usr/local/opencv310/include/opencv2" )
include_directories(${OpenCV_LIBRARY_DIRS} /usr/local/opencv310/lib)
如果需要卸載OpenCV,執行:
make uninstall cd .. sudo rm -r build sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*
平時的小問題:報錯:[Error] ‘setprecision’ is not a member of ‘std’
解決:需要加上頭文件 便可通過編譯 :
#include <iostream>
#include <iomanip>