一 OpenCV簡要介紹
OpenCV是一個開源的計算機視覺庫,可以運行在Linux、Windows和Mac等操作系統上,其底層爲C/C++語言編寫目前支持的語言藉口有:
- C/C++
- Python
- Matlab等等
該庫使用方便,用戶根據開發語言需要配置好語言環境即可
1.1 opencv源碼安裝總體步驟概覽:
即採用編譯安裝軟件項目的方式來處理:
二 源碼下載
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計算機視覺編程》.人民郵電出版社