1. 程式人生 > >Ubuntu14.04下opencv3和opencv2共存和使用方法

Ubuntu14.04下opencv3和opencv2共存和使用方法

個人分類: SLAM 解決方案 Ubuntu

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u011092188/article/details/77842002

本系列文章為原創,轉載請註明出處。作者:Dongdong Bai郵箱: [email protected]

若您覺得本博文對您有幫助,請您為我點贊並關注我,以鼓勵我寫出更優秀的博文。謝謝!

一、 安裝多版本OpenCV的原因

OpenCV2和OpenCV3是目前主流的兩個版本,有些程式使用OpenCV2,同時有些程式使用了OpenCV3,但是OpenCV2和OpenCV3的API和結構並不完全相同,比如在OpenCV3以後,SIFT和SURF之類的屬性被移到了contrib中了,因此我們需要在一臺計算機上同時安裝並使用多個版本OpenCV。

二、 安裝OpenCV2和OpenCV3

1. 安裝依賴庫

安裝官方要求必選包:

sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
  • 1

安裝官方可選包:

sudo apt-get install  python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
  • 1

新增對OpenGL的支援所需要的包:

sudo apt-get install freeglut3-dev mesa-common-dev  libgtkglext1 libgtkglext1-dev
  • 1

安裝視訊處理所需的包

sudo apt-get install checkinstall yasm libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libgtk2.0-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils  ffmpeg
  • 1

優化opencv的功能包

sudo apt-get install libatlas-base-dev gfortran qt5-default qtcreator
  • 1

2.下載原始碼

  • 下載OpenCV2.4.13.3原始碼:
git clone https://github.com/opencv/opencv/tree/2.4.13.3
  • 1
  • 下載OpenCV3.3.0原始碼:
git clone https://github.com/opencv/opencv/tree/3.3.0
  • 1
  • 下載OpenCV3.3.0_contrib原始碼:
git clone https://github.com/opencv/opencv_contrib/tree/3.3.0
  • 1

2.安裝OpenCV2和OpenCV3 (無CUDA版本)

  • 安裝OpenCV2.4.13.3
$ cd opencv-2.4.13.3/
$ mkdir build
$ cd  build
$ cmake -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr/local/opencv2 \
    -DWITH_TBB=ON \
    -DWITH_IPP=ON \
    -DWITH_QT=ON \
    -DWITH_GTK=ON \ 
    -DWITH_V4L=ON \
    -DWITH_LIBV4L=ON \
    -DWITH_OPENGL=ON \
    -DWITH_FFMPEG=ON \
    -DBUILD_EXAMPLES=ON \
    -DINSTALL_PYTHON_EXAMPLES=ON \
    -DINSTALL_C_EXAMPLES=ON \
    -DPYTHON_EXECUTABLE=/usr/bin/python \
    -DPYTHON_INCLUDE_DIR=/usr/include/python2.7 \
    -DPYTHON_INCLUDE_DIR2=/usr/include/x86_64-linux-gnu/python2.7 \
    -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
    -DPYTHON_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include/  ..
$ make -j $(($(nproc) + 1))
$ sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 安裝OpenCV3.3.0: 首先將OpenCV3.3.0_contrib-3.3.0放到opencv-3.3.0目錄下,然後執行下面命令。
$ cd opencv-3.3.0/
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr/local/opencv3 \
    -DOPENCV_EXTRA_MODULES_PATH=/home/bdd/opencv-3.3.0/opencv_contrib-3.3.0/modules \
    -DWITH_TBB=ON \
    -DWITH_QT=ON \
    -DWITH_GTK=ON \ 
    -DWITH_V4L=ON \
    -DWITH_LIBV4L=ON \
    -DWITH_OPENGL=ON \
    -DWITH_FFMPEG=ON \
    -DBUILD_EXAMPLES=ON \
    -DINSTALL_PYTHON_EXAMPLES=ON \
    -DINSTALL_C_EXAMPLES=ON \
    -DPYTHON_EXECUTABLE=/usr/bin/python \
    -DPYTHON_INCLUDE_DIR=/usr/include/python2.7 \
    -DPYTHON_INCLUDE_DIR2=/usr/include/x86_64-linux-gnu/python2.7 \
    -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
    -DPYTHON_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include/  ..
$ make -j $(($(nproc) + 1))
$ sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

其中OPENCV_EXTRA_MODULES_PATH:指定的OpenCV3.3.0_contrib路徑

3.安裝OpenCV3和OpenCV3 (CUDA版本)

CUDA版的安裝方法與無CUDA版的方法類似,除了安裝CUDA的一些驅動外,只是在cmake後面新增一些關於CUDA的引數。

對於CMake中關於CUDA的選項設定,其中要注意的是 CUDA_GENERATION 的設定。如果選擇您GPU核心的型號(Pascal、Maxwell等),那麼就不需要設定CUDA_ARC_BIN和CUDA_ARC_PTX引數,可是這種條件下會導致一些錯誤。推薦的方法是設定 CUDA_GENERATION = Auto,然後到這個網址檢視您顯示卡的Compute Capability,填到CUDA_ARC_BIN,CUDA_ARC_PTX中。比如的我的顯示卡是GTX TITANXP,其對應的Compute Capability為6.1,那麼應該設定CUDA_ARC_BIN=6.1,CUDA_ARC_PTX=6.1

  • 安裝OpenCV2.4.13.3
$ cd opencv-2.4.13.3/
$ mkdir build
$ cd  build
$ cmake -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr/local/opencv2 \
    -DWITH_TBB=ON \
    -DWITH_IPP=ON \
    -DWITH_QT=ON \
    -DWITH_GTK=ON \ 
    -DWITH_CUDA=ON \
    -DWITH_CUBLAS=ON \
    -DWITH_CUFFT=ON \
    -DWITH_V4L=ON \
    -DWITH_LIBV4L=ON \
    -DWITH_OPENGL=ON \
    -DWITH_FFMPEG=ON \
    -DBUILD_EXAMPLES=ON \
    -DINSTALL_PYTHON_EXAMPLES=ON \
    -DINSTALL_C_EXAMPLES=ON \
    -DCUDA_GENERATION=Auto \
    -DCUDA_ARCH_BIN=6.1 \
    -DCUDA_ARCH_PTX=6.1 \
    -DPYTHON_EXECUTABLE=/usr/bin/python \
    -DPYTHON_INCLUDE_DIR=/usr/include/python2.7 \
    -DPYTHON_INCLUDE_DIR2=/usr/include/x86_64-linux-gnu/python2.7 \
    -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
    -DPYTHON_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include/  ..
$ make -j $(($(nproc) + 1))
$ sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 安裝OpenCV3.3.0: 同樣首先應將OpenCV3.3.0_contrib-3.3.0放到opencv-3.3.0目錄下,然後執行下面命令。
$ cd opencv-3.3.0/
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr/local/opencv3 \
    -DOPENCV_EXTRA_MODULES_PATH=/home/bdd/opencv-3.3.0/opencv_contrib-3.3.0/modules \
    -DWITH_TBB=ON \
    -DWITH_QT=ON \
    -DWITH_GTK=ON \ 
    -DWITH_CUDA=ON \
    -DWITH_CUBLAS=ON \ 
    -DWITH_CUFFT=ON \
    -DWITH_V4L=ON \
    -DWITH_LIBV4L=ON \
    -DWITH_OPENGL=ON \ 
    -DWITH_FFMPEG=ON \
    -DBUILD_EXAMPLES=ON \
    -DINSTALL_PYTHON_EXAMPLES=ON \
    -DINSTALL_C_EXAMPLES=ON \
    -DCUDA_GENERATION=Auto \
    -DCUDA_ARCH_BIN=6.1 \
    -DCUDA_ARCH_PTX=6.1 \
    -DPYTHON_EXECUTABLE=/usr/bin/python \
    -DPYTHON_INCLUDE_DIR=/usr/include/python2.7 \
    -DPYTHON_INCLUDE_DIR2=/usr/include/x86_64-linux-gnu/python2.7 \
    -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
    -DPYTHON_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include/  ..
$ make -j $(($(nproc) + 1))
$ sudo make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

三、不同版本切換的方法:

不同版本的OpenCV編譯好後,都會生成一個 OpenCVConfig.cmake,這個檔案中指定了對應庫函式和標頭檔案的位置。在本教程的情況下,OpenCV2對應的OpenCVConfig.cmake在/usr/local/opencv2/share/OpenCV,OpenCV3對應的OpenCVConfig.cmake在/usr/local/opencv3/share/OpenCV。因此,如果要使用那個版本的OpenCV只需要將對應版本OpenCVConfig.cmake的路徑寫入CMakeLists.txt即可。這就是說,當自己所寫的程式使用到OpenCV3時,在 FIND_PACKAGE( OpenCV REQUIRED ) 前,新增set(OpenCV_DIR “/usr/local/opencv3/share/OpenCV”) 這樣計算機就找到OpenCV3的對應標頭檔案和庫檔案了,如果使用OpenCV2,那麼新增set(OpenCV_DIR “/usr/local/opencv2/share/OpenCV”)在FIND_PACKAGE( OpenCV REQUIRED ) 前就好。比如下面是一個使用OpenCV3的例子。

CMAKE_MINIMUM_REQUIRED( VERSION 2.8)
PROJECT(useOpenCV)
set(OpenCV_DIR "/usr/local/opencv3/share/OpenCV") 
FIND_PACKAGE(OpenCV REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
add_executable(useOpenCV useOpenCV.cpp)
TARGET_LINK_LIBRARIES(useOpenCV ${OpenCV_LIBRARIES})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

本系列文章為原創,轉載請註明出處。作者:Dongdong Bai郵箱: [email protected]

若您覺得本博文對您有幫助,請您為我點贊並關注我,以鼓勵我寫出更優秀的博文。謝謝!