在Ubuntu作業系統上安裝OpenCV

這一次是要將OpenCV安裝在Linux系統下,有了OpenCV就可以快速的進行影像處理,非常的方便好用。這一次要裝的是 OpenCV 2.4.6.1 的版本,搭配 Lubuntu 13.10,因為Ubuntu與Lubuntu的內容大概只有桌面環境是不一樣的,所以我想兩者在安裝上是沒有差別的。而OpenCV的主程式中副有很多有趣的範例程式,也可以藉此找到想用的功能,加入自己的程式中,且可用於多種程式語言如C、C++、Python等。

這些安裝步驟是前些日子在網路上找到的,經過實際測試後整理出來的結果,最下面參考來源是原始網頁的內容。


安裝OpenCV 2.4.6.1於Ubuntu 13.10

(1) 安裝相關套件,可能需要花一點時間。
$ 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
看似有點多,將他直接複製接上到終端機就行了,在終端機游標上按滑鼠右鍵可以複製接上。


(2) 下載OpenCV安裝檔案
OpenCV的主程式可以直接在官方網站下載
http://opencv.org/

下載完後,將目錄移至到檔案所在位置(我自己是放在家目錄下),並解壓縮
$ tar -xvf opencv-2.4.6.1.tar.gz
此時應該會在同目錄產生一個資料夾「opencv-2.4.6.1」,進入資料夾中
$ cd ~/opencv-2.4.6.1



(3) 建立一個目錄來編譯程式
$ mkdir build
$ cd ./build

(4) 用cmake指令生成make檔
$ cmake -D 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 ..
執行完成應該會看到一張漂亮的清單,如果都沒有錯誤表示可進入下一步。


如果中途顯示出有ERROR就看看是哪一個程軟體問題,通常是指定的軟體未安裝才會有錯,把對應的軟體補安裝上去就是了。補完之後再cmake試試。新版的opencv 2.4.X搭配新版的ubuntu 13.10不會有太多問題,如果是OenCV 1.X版的問題會非常多,我也沒有安裝成功。

(5) 編譯,會花很常的時間,要慢慢等
$ make

(6) 安裝
$ sudo make install

(7) 修改設定檔
$ sudo vim /etc/ld.so.conf.d/opencv.conf
打開新檔案,把下面這行加上去。完成後按「:wq」儲存離開
 /usr/local/lib

執行設定檔
$sudo ldconfig

(8) 設定環境變數,好像不做也是可行,似乎是為了確保環境變數位置
$ sudo vim /etc/bash.bashrc
把下面兩行加到文件的最後
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

完成,接下來就來測試OpenCV能不能運作,最一開始所下載的OpenCV安裝檔中包含了程式範例,就是在子資料夾「samples」中,裡面有c、c++、python等多種程式語言的範例。再做程式開發的時候也可以參考這些範例內容,擷取所需要的程式碼來使用,會事半功倍。



測試C語言範例

進入C語言範例資料夾
$ cd ~/opencv-2.4.6.1/samples/c

裡頭會有一個檔案「build_all.sh」,如果這個檔案還是不可執行檔,就先改一下權限。這樣就可以直接執行他了。這個檔案能夠編譯c語言資料夾下所有的範例。
$ chmod 777 build_all.sh
$ ./build_all.sh



執行這個檔案後,應該會看到他跑出了一連串的錯誤,說明有一半以上的檔案無法順利編譯,這是因為裡頭包含了數學函式庫,在gcc編譯時需要在後面加上-lm,所以需要修改一下這個檔案的內容。
$ vim build_all.sh

進入這個檔案後,將gcc指令後都加上「-lm」,再重新執行一次程式,應該就可以順利的編譯所有檔案了。這時也可以發現在編譯c語言的opencv程式時,都需要加上一些特別的東西「-ggdb `pkg-config --cflags opencv`   `pkg-config --libs opencv`」,可以順道記下來,以後忘了也可以來這裡查。

舉例來說,再編譯含有OpenCV函式的檔案時,應該要下這樣的指令(以motempl.c)
$ gcc  -o motempl motempl.c -lm  -ggdb `pkg-config --cflags opencv` `pkg-config --libs opencv`

經過剛剛編譯好的執行檔,可以直接執行,有些事需要添加引數,有些不需要,可以都是試看。以下是常見的執行範例,如果執行facedetect會產生臉上有藍色圈圈的圖片,那就是成功了。
$ ./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 lena.jpg



測試python範例


測試python範例相對就簡單了,Ubuntu本身應該都會預裝好Python 2.7.5,如果不確定版本的話,可以再終端機直接輸入「python」來確認。
要執行範例程式,先進入範例資料夾,這裡有兩個python開頭的資料夾,我們進入python2這一個(python裡頭是import cv2.cv as cv,python2裡頭是以import cv2為主)。
$ cd ~/opencv-2.4.6.1/samples/python2

大多數的檔案可以直接執行,輸入「$ python <檔名>」即可,例如
$ python facedetect.py


參考資料


留言

  1. 您好,我在$ ./build_all.sh這一步碰到了以下錯誤
    /usr/bin/ld: cannot find -lcufft
    /usr/bin/ld: cannot find -lnpps
    /usr/bin/ld: cannot find -lnppi
    /usr/bin/ld: cannot find -lnppc
    /usr/bin/ld: cannot find -lcudart
    collect2: error: ld returned 1 exit status

    但是無法順利下載lib
    chingwei@chingwei-Predator-G3610-U:/usr/local/share/OpenCV/samples/c$ sudo apt-cache search libcufft-dev libnpps-dev libnppi-dev libnppc-dev libcudart-dev
    chingwei@chingwei-Predator-G3610-U:/usr/local/share/OpenCV/samples/c$ sudo apt-get install libcufft-dev libnpps-dev libnppi-dev libnppc-dev libcudart-dev
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    E: Unable to locate package libcufft-dev
    E: Unable to locate package libnpps-dev
    E: Unable to locate package libnppi-dev
    E: Unable to locate package libnppc-dev
    E: Unable to locate package libcudart-dev
    請問該怎救~

    回覆刪除

張貼留言

這個網誌中的熱門文章

[比較]華碩ASUS ZenFone 3系列的各種變形分析。買手機、挑手機的攻略

[開箱]索尼粉必備。美麗窄邊框手機Sony Xperia XA1 粉嫩嫩開箱與使用心得

在Linux上常用的終端機指令(shell)整理

[比較]Arduino各開發板之差異比較

[開箱]震撼的神器VR CASE 5 PLUS開箱,便宜簡單又快速的手機頭戴式VR眼鏡

[台東]騎機車遊台東,三仙台、池上便當、伯朗大道金城武樹一日走透透