1. 程式人生 > >ubuntu 16.04 安裝opencv 3.2.0

ubuntu 16.04 安裝opencv 3.2.0

環境: Ubuntu 16.04 64bit ,openCV 3.2.0

1.安裝opencv依賴包

  • GCC 4.4.x or later

  • CMake 2.6 or higher

  • Git

  • GTK+2.x or higher, including headers (libgtk2.0-dev) # 控制opencv GUI

  • pkg-config

  • Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev, python-numpy)

  • ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev

  • [optional] libtbb2 libtbb-dev

  • [optional] libdc1394 2.x

  • [optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev

命令如下:

$ 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 # 處理影象所需的包
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev # 處理視訊所需的包
$ sudo apt-get install libatlas-base-dev gfortran # 優化opencv功能
$ sudo apt-get install ffmpeg  

2.下載opencv3.2.0
這裡需要下載opencv和opencv_contrib(後者會在cmake配置的時候用到),這是因為opencv3以後SIFT和SURF之類的屬性被移到了contrib中。

$ wget https://github.com/opencv/opencv/archive/3.2.0.zip # 從github上直接下載或者clone也可
$ wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip

3.安裝opencv3.2.0

$ cd opencv3.2.0
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

CMAKE_INSTALL_PREFIX:安裝的python目錄字首,指定了python模組的安裝路徑:CMAKE_INSTALL_PREFIX/lib/python2.7/dist-packages,獲取該路徑的方式可以用:

python -c "import sys; print sys.prefix"

在安裝過程中,很有可能會出現錯誤:ICV: Downloading ippicv_linux_20151201.tgz 超時,據說此部分可有可無,可自行搜尋檔名進行下載,然後替換opencv-3.2.0/3rdparty/ippicv/downloads/linux-*目錄下的同名檔案,重新cmake。

optional(顯示指定一些編譯內容),我在安裝時未顯示指定:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D ENABLE_FAST_MATH=1 -D WITH_CUDA=ON -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D CUDA_GENERATION=Auto -D WITH_GSTREAMER_0_10=OFF ..

在build目錄下:

$ make -j4

-j4表示四核運算,可根據電腦配置選擇。

然後

$ sudo make install

後續使用可能存在的問題

1.會有在make -j4遇到G++版本太高的問題。
修改opencv-3.2.0目錄下的CMakeList.txt檔案,在開頭加入set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -D_FORCE_INLINES”)然後重新cmake,再make -j4,再make install

2.如遇到‘NppiGraphcutState’ has not been declared,是opencv與cuda8.0不相容導致的。之前的opencv版本都會有問題,opencv2.4.13沒有問題,這是唯一一個2016年釋出的版本。解決方法:
在path/to/opencv/modules/cudalegacy/src/graphcuts.cpp中,把
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
改為
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION>=8000)
參考:Ubuntu16.04+CUDA8.0+caffe配置

3.設定Shared Library
另外在之後的使用中可能會出現找不到庫的情況,這是因為沒有把庫放到一個能找到的位置。
該部分參考:openCV program compile error “libopencv_core.so.2.4: cannot open shared object file: No such file or directory” in ubuntu 12.04
在/usr/local目錄下查詢opencv庫所在位置,有的是在/usr/local/opencv和/usr/local/opencv2下面,有的是在/usr/local/lib下找到的。如果找不到,可嘗試:

sudo updatedb && locate libopencv_core.so.3.2

3.2為版本號。

新建檔案:

sudo vim /etc/ld.so.conf.d/opencv.conf

寫入地址/usr/local/lib,並儲存。

更新:

sudo ldconfig -v