OpenCV2和OpenCV3兼容安裝

 個人博客:http://www.chenjianqu.com/

原文鏈接:http://www.chenjianqu.com/show-79.html

 

  最近重新開始使用opencv-cpp,有些項目需要的是OpenCV2,有些需要多是OpenCV3,這兩個版本的如何共存是個值得研究多問題。這裏記錄一次OpenCV3和2的安裝過程。

安裝OpenCV3

1.源碼下載

我這裏使用的是OpenCV3.4.1,再github可以下載其源代碼:https://github.com/opencv/opencv/tags?after=4.0.0-beta

 

2.依賴安裝

    我使用的是opencv3.4.1,需要安裝以下依賴.

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

3.編譯安裝

    解壓下載的opencv源代碼包,並在終端進入該目錄,然後新建build文件夾。

(base) chenjianqu@chen:~/software/opencv-3.4.1$ mkdir build
(base) chenjianqu@chen:~/software/opencv-3.4.1$ cd build

    接着就可以直接編譯安裝了。

cmake -D BUILD_TIFF=ON -D ENABLE_PRECOMPILED_HEADERS=OFF ..
make -j8  #開啓8個線程
sudo make install

    讓系統能找到opencv庫路徑

sudo gedit /etc/ld.so.conf.d/opencv.conf   # 末尾添加/usr/local/lib  
sudo ldconfig  # 使得上面的配置路徑生效

    配置bash

sudo gedit /etc/bash.bashrc

#末尾添加下面兩行

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  

export PKG_CONFIG_PATH  

source /etc/bash.bashrc # 保存,執行如下命令使得配置生效
sudo updatedb # 更新

4.測試

    使用KDevelop4測試OpenCV的效果。

CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
project(imagebinoculartest)

# 添加c++ 11標準支持
set( CMAKE_CXX_FLAGS "-std=c++11" )

find_package( OpenCV 3 REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )

add_executable(imagebinoculartest main.cpp)
target_link_libraries(imagebinoculartest ${OpenCV_LIBS})

install(TARGETS imagebinoculartest RUNTIME DESTINATION bin)

 

main.cpp

#include <iostream>
#include <chrono>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;
int main ( int argc, char** argv )
{
    cout << "OpenCV version : " << CV_VERSION << endl;
    
    Mat leftImg=imread("left.png",0);
    Mat rightImg=imread("right.png",0);
  
    imshow ( "leftImg", leftImg);
    imshow ( "rightImg", rightImg);
    waitKey ( 0 );

    destroyAllWindows();
    return 0;
}

 

安裝OpenCV2

1.源碼下載

我這裏使用的是OpenCV2.4.8,再github可以下載其源代碼:https://github.com/opencv/opencv/tags?after=3.0.0-alpha

 

2.依賴安裝

    需要安裝以下依賴.

sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev

3.編譯安裝

    跟OpenCV3一樣,解壓源代碼,新建build目錄,在build目錄下編譯安裝。設置安裝目錄爲/usr/local/opencv248。

sudo mkdir -p /usr/local/opencv248
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv248 -D WITH_CUDA=OFF -D ENABLE_PRECOMPILED_HEADERS=OFF..

    因爲我這裏安裝了CUDA9.0,不支持OpenCV2.4,因此我這裏把CUDA編譯選項關掉了。然而CMake的時候,還是報錯了:

    報錯1:

CMake Error at cmake/OpenCVDetectCXXCompiler.cmake:85 (list):
  list GET given empty list
Call Stack (most recent call first):
  CMakeLists.txt:77 (include)

    解決辦法:參照https://blog.csdn.net/u010003609/article/details/100086911 

    接下來進行make:

make -j4

    進行到92%的時候,又出錯了。

    報錯2:

 

[ 92%] Building CXX object modules/contrib/CMakeFiles/opencv_contrib.dir/src/retinacolor.cpp.o
/home/chen/lib/opencv-2.4.8.3/modules/contrib/src/chamfermatching.cpp: In member function ‘void cv::ChamferMatcher::Matching::computeDistanceTransform(cv::Mat&, cv::Mat&, cv::Mat&, float, float, float)’:
/home/chen/lib/opencv-2.4.8.3/modules/contrib/src/chamfermatching.cpp:969:30: error: the compiler can assume that the address of ‘annotate_img’ will never be NULL [-Werror=address]
             if (&annotate_img!=NULL) {
                              ^
/home/chen/lib/opencv-2.4.8.3/modules/contrib/src/chamfermatching.cpp:1016:34: error: the compiler can assume that the address of ‘annotate_img’ will never be NULL [-Werror=address]
                 if (&annotate_img!=NULL) {
                                  ^
/home/chen/lib/opencv-2.4.8.3/modules/contrib/src/chamfermatching.cpp: In member function ‘cv::ChamferMatcher::Match* cv::ChamferMatcher::Matching::localChamferDistance(cv::Point, cv::Mat&, cv::Mat&, cv::ChamferMatcher::Template*, float)’:
/home/chen/lib/opencv-2.4.8.3/modules/contrib/src/chamfermatching.cpp:1111:25: error: the compiler can assume that the address of ‘orientation_img’ will never be NULL [-Werror=address]

    解決辦法參照https://blog.csdn.net/Qin605/article/details/86621313 

 

4.測試

    此時已經安裝了兩個版本的OpenCV,但是系統默認的是OpenCV3,可以通過如下命令查看OpenCV的版本:

pkg-config --modversion opencv

    可以通過再~/.bashrc裏設置環境變量來更改默認的OpenCV爲OpenCV2:

sudo gedit ~/.bashrc

    在該文件末尾添加路徑:

export PKG_CONFIG_PATH=/usr/local/opencv249/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv249/lib

    然後更新bash:

sudo source ~/.bashrc

    此時再使用pkg-config --modversion opencv來查看版本就能發現已經更改爲OpenCV2.4.8了。

    這裏使用程序進行測試。程序和上面的OpenCV3一樣,但是CMakeLists.txt需要進行配置:

CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
project(imagebinoculartest)

set( CMAKE_CXX_FLAGS "-std=c++11" )

set(OpenCV_DIR /usr/local/opencv248/share/OpenCV)
find_package(OpenCV 2.4 REQUIRED)
include_directories(SYSTEM ${OpenCV_INCLUDE_DIRS} /usr/local/opencv248/include)

add_executable(imagebinoculartest main.cpp)
target_link_libraries(imagebinoculartest ${OpenCV_LIBS})

install(TARGETS imagebinoculartest RUNTIME DESTINATION bin)

    這樣就能使用OpenCV2了。

 

 

 

參考文獻

[0]ykwjt.ubuntu16.04上的OpenCV多版本共存.2019-05-15 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章