OpenCV-3編譯安裝方法及常見錯誤解決(Ubuntu平臺)

一 OpenCV簡要介紹

OpenCV是一個開源的計算機視覺庫,可以運行在Linux、Windows和Mac等操作系統上,其底層爲C/C++語言編寫目前支持的語言藉口有:

  • C/C++
  • Python
  • Matlab等等

該庫使用方便,用戶根據開發語言需要配置好語言環境即可


1.1 opencv源碼安裝總體步驟概覽:

Created with Raphaël 2.1.0確立版本確立版本源碼下載源碼下載編譯環境安裝編譯環境安裝編譯編譯安裝安裝測試測試2.x or 3.xcuda、matlab、python、java等依賴包、cmake、makemake installdemo

即採用編譯安裝軟件項目的方式來處理:

Created with Raphaël 2.1.0開始編譯安裝是否成功?結束yesno

二 源碼下載

a. 可以從OpenCV官網直接下載:

http://opencv.org/downloads.html

b.也可以從github上clone:

比如工作目錄爲myopencv即,

cd ~/myopencv
git clone https://github.com/Itseez/opencv.git
git clone https://github.com/Itseez/opencv_contrib.git

三 編譯環境安裝

3.1 依賴包安裝

打開shell終端,鍵入:

sudo apt-get install libopencv-dev build-essential cmake git libprotobuf-dev 
sudo apt-get install libgtk2.0-dev pkg-config python-dev python-numpy
sudo apt-get install libsnappy-dev gtk+-3.0 yasm Doxygen 
sudo apt-get install libdc1394-22 libopenblas-dev liblmdb-dev 
sudo apt-get install libdc1394-22-dev libjpeg-dev libpng12-dev libtiff4-dev 
sudo apt-get install libjasper-dev libhdf5-serial-dev 
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libxine-dev 
sudo apt-get install libgstreamer0.10-dev libgflags-dev
sudo apt-get install libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev 
sudo apt-get install libqt4-dev libfaac-dev libgoogle-glog-dev
sudo apt-get install libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev 
sudo apt-get install libtheora-dev libvorbis-dev protobuf-compiler liblapack-dev
sudo apt-get install libxvidcore-dev x264 v4l-utils unzip liblapacke-dev 
sudo apt-get install libavresample-dev libgphoto2-dev libavutil-dev
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev

3.2 ffmpeg安裝

ffmpeg是一個開源的處理視頻的軟件

sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next 
sudo apt-get update 
sudo apt-get install ffmpeg

四 編譯

4.1 命令參考編譯安裝方法

首先在myopencv目錄下的opencv目錄中建立build文件夾,

cd myopencv/opencv
mkdir build

假如不加入contrib模塊

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_QT=OFF -D WITH_OPENGL=ON ..

假如要加入contrib模塊,那麼:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/ -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D OPENCV_EXTRA_MODULES_PATH=~/myopencv/opencv_contrib/modules/ ~/myopencv/opencv

當上述cmake命令執行後,會自動下載編譯所需的第三方包,等待即可,包括ippcv等。

4.2 cmake 圖形化界面(cmake-gui)編譯

可以參考網址:http://blog.csdn.net/jay463261929/article/details/53197228

五 安裝

5.1 生成可執行文件安裝

採用make -j $(nproc)命令—-j後面跟的參數爲參與編譯的CPU核數

make -j4
sudo make install

5.2 設置opencv位置

執行下面命令即可

sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
sudo apt-get update

六 測試

以python爲例,在python命令行中輸入:

import cv2

顯示正確即可

七 編譯錯誤調試

7.1 缺少xxx.h文件

缺少xxx.h文件安裝方法——————到/usr/include/目錄下面查找類似的文件
下面是兩個例子(前提是安裝好相關依賴包,根據缺少的.h文件尋找需要的包)

例1:缺少videodev.h————linux/videodev.h not found

執行下面命令

sudo ln -s /usr/include/libv4l1-videodev.h  /usr/include/linux/videodev.h

例2:缺少videoio.h————sys/videoio.h not found

執行下面命令

sudo cp /usr/include/opencv2/videoio/videoio_c.h  /usr/include/x86_64-linux-gnu/sys
sudo ln -s /usr/include/x86_64-linux-gnu/sys/videoio_c.h  /usr/include/x86_64-linux-gnu/sys/videoio.h

7.2 /usr/bin/ld: cannot find -l****問題的解決辦法

在ubuntu下編譯C或cpp文件時,可能會出現找不到鏈接庫的問題,其形式爲:

cannot find -l****
這裏的**一般是指的鏈接庫,
既然是lib文件鏈接有問題,簡單了。這種情況分兩種

在usr/lib目錄下有這些庫文件

直接修復以下鏈接即可,例如依次執行

ln -s lib***.so.6(某個數字) lib***.so

即可

在usr/lib目錄下沒有這些文件

直接在系統根目錄中依次搜索這些庫文件,並使用

sudo cp 庫文件名 /usr/lib

命令將相應庫文件拷貝到該目錄中即可

7.3 缺少lippicv

將opencv-3.x源碼包下面的3rdparty下面的ippicv的unpack裏面的ippicv_lnx裏面的lib的intel64文件夾裏面的libippicv.a拷貝到/usr/local/lib下面

7.4 opencv error: ‘NppiGraphcutState‘ has not been declared

如:
錯誤:/home/usrname/OpenCV-3.1.0/modules/cudalegacy/src/graphcuts.cpp:120:54: error: ‘NppiGraphcutState‘ has not been declared
typedef NppStatus (init_func_t)(NppiSize oSize, NppiGraphcutState* ppStat
^
/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:135:18: error: ‘NppiGraphcutState‘ does not name a type
operator NppiGraphcutState*()
^
/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:141:9: error: ‘NppiGraphcutState‘ does not name a type
NppiGraphcutState* pState;
…….
解決方案:
如opencv-3.1.0版本
進入opencv-3.1.0/modules/cudalegacy/src/目錄,修改graphcuts.cpp文件,將:

#include "precomp.hpp"
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
改爲
#include "precomp.hpp"
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)

其他版本修改修改graphcuts.cpp文件即可。
然後make編譯就可以了

參考文獻和書目

【1】http://blog.csdn.net/jay463261929/article/details/53197228
【2】http://blog.csdn.net/lemianli/article/details/73614453
【3】Gary Byadski等著.《學習opencv》.清華大學出版社
【4】Jan Erik Solem 著.《Python計算機視覺編程》.人民郵電出版社

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