在 Raspberry Pi 上面安裝 OpenCV 函式庫

這裡介紹如何在 Raspberry Pi 上面安裝 OpenCV 函式庫,安裝方式可選擇使用 apt 或是自行編譯安裝。

OpenCV 是一個很強大的電腦視覺(Computer Vision)工具,可用於開發即時的影像處理、電腦視覺以及模式識別程式,應用領域很廣泛,以下介紹如何在 Raspberry Pi 上面安裝與使用 OpenCV。

安裝 OpenCV

要在 Raspberry Pi 上面安裝 OpenCV,可以分為兩種方式,一種是直接使用 apt 來安裝,這種方式最簡單,一般建議是用這種。而另外一種則是從 OpenCV 的網站下載原始碼自行編譯,這種安裝方式比較麻煩,如果需要最新版的 OpenCV 或是有特殊需求想要自行調整編譯參數的人才需要用這種方式。

使用 Apt 安裝 OpenCV

如果要在 Raspberry Pi 中安裝與使用 OpenCV,最方便的方式就是使用 apt 來安裝:

sudo apt-get install libopencv-dev

基本上這樣系統就會自動把 OpenCV 的函式庫安裝好,非常簡單。

下載 OpenCV 原始碼自行編譯安裝

如果您需要最新版的 OpenCV,那麼就會需要抓取最新的原始碼來編譯,以下是下載、編譯與安裝的步驟。

Step 1
安裝編譯 OpenCV 所需要的套件:

sudo apt-get install build-essential cmake cmake-curses-gui pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools libeigen3-dev

需要的套件很多,這是另外一部分:

sudo apt-get install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libxine1-ffmpeg libxine-dev libxine1-bin libunicap2 libunicap2-dev swig libv4l-0 libv4l-dev python-numpy libpython2.6 python-dev python2.6-dev libgtk2.0-dev

Step 2
OpenCV 的網站上下載 OpenCV 的原始碼,下載下來之後,先解壓縮:

unzip opencv-2.4.10.zip

或是直接使用 Git 下載:

git clone https://github.com/Itseez/opencv.git

Step 3
進入 OpenCV 的原始碼目錄,建立一個編譯用的子目錄。

cd opencv-2.4.10
mkdir release
cd release

使用 ccmake 建立 CMake 設定檔:

ccmake ../

由於我們建立的是一個全新的編譯設定,所以會顯示 Empty Cache,直接按下「c」繼續。

raspberry-pi-opencv-1

接著會出現所有可以調整的選項,您可以依照自己的需求來修改。

raspberry-pi-opencv-2

修改完後,按下「c」設定新的選項,然後再按下「g」即可產生編譯用的設定檔案。

Step 4
進行編譯:

make
sudo make install

由於 Raspberry Pi 的處理速度很慢,所以編譯的過程會需要很久的時間,大該需要十個小時左右。在編譯的過程會需要大約 2G 的空間,所以也要注意一下 Raspberry Pi 的記憶卡所剩餘的空間是否充足。

OpenCV Hello World

安裝好 OpenCV 函式庫之後,接著寫一個小的程式測試一下:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main( int argc, char** argv ) {
    if( argc != 2) {
     cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
     return -1;
    }
    Mat image;
    // Read the file
    image = imread(argv[1], CV_LOAD_IMAGE_COLOR);
    if(! image.data ) { // Check for invalid input
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }
    // Create a window for display.
    namedWindow( "Display window", WINDOW_AUTOSIZE );
    // Show our image inside it.
    imshow( "Display window", image );
    // Wait for a keystroke in the window
    waitKey(0);
    return 0;
}

我將這個顯示圖片的程式碼儲存為 display_image.cpp,然後使用 g++ 編譯:

g++ -lopencv_highgui -lopencv_core -o display_image display_image.cpp

編譯時要加上連結用的函式庫 -lopencv_highgui -lopencv_core,如果不清楚該加哪些,可以直接使用 pkg-config 把所有的 OpenCV 函式庫都放進去:

g++ `pkg-config --libs opencv` -o display_image display_image.cpp

如果可以正常編譯出來 display_image 這個執行檔,就表示 OpenCV 已經安裝成功了,這個測試程式可以顯示指定的圖檔:

./display_image lena.jpg

如果您對於樹莓派的應用有興趣,建議您可以繼續閱讀物聯網的相關文章。

參考資料:robertcastle.com

樹莓派, 物聯網

5 留言

  1. Tommy

    請問你們raspberry-pi做這些用的是什麼OS?

    • G. T. Wang

      我使用的 OS 是官方的 Raspbian Linux

  2. Tommy

    順帶一提,你們驗證碼的格子無法輸入。

    • G. T. Wang

      已修正,感謝您的提醒。

  3. tchelit

    g++編譯後出現錯誤如下

    /usr/bin/ld: /tmp/ccZL4APh.o: undefined reference to symbol ‘_ZN2cv6imreadERKNS_6StringEi’
    //usr/local/lib/libopencv_imgcodecs.so.3.2: error adding symbols: DSO missing from command line
    collect2: error: ld returned 1 exit status

Comments are Closed