2016年2月17日 星期三

Opencv C install

自行編譯OPENCV

先跟新套件
$ sudo apt-get update
$ sudo apt-get dist-upgrade -y


若是直接安裝現成的套件,指令如下:
$ sudo apt-get install libopencv-dev

建制與編譯所需工具:
$ sudo apt-get install build-essential gcc cmake pkg-config

python相關:
$ sudo apt-get install python python-dev python-numpy 

圖形視窗程式庫:
$ sudo apt-get install libgtk2.0-dev

音訊、視訊的編譯碼、錄製、串流:
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev

圖檔格式
$ sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libjasper-dev

IEEE 1394相機介面:
$ sudo apt-get install libdc1394-22-dev

TBB
$ sudo apt-get install libtbb2 libtbb-dev

大都沒問題,但是Raspbian沒有libtbb2和libtbb-dev這兩個套件,於是也必須自己編譯;照理說這是選用性功能,可有可無,但TBB是C/C++平行處理程式庫,有了它,OpenCV的速度會較快。
到TBB網站,查詢原始碼檔案的網址,下載並解壓縮,得到含原始碼檔案的目錄,切換進去:
$ wget https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb44_20151115oss_src.tgz
$ tar zxvf tbb44_20151115oss_src.tgz
$ cd tbb44_20151115oss

開始建制,根據這篇,加上參數
$ make tbb CXXFLAGS="-DTBB_USE_GCC_BUILTINS=1 -D__TBB_64BIT_ATOMICS=0"

然後進入子目錄build,裡頭會有兩個目錄存放建置結果,其一以debug結尾、另一個以release結尾,切換到release那一個:
$ cd build
$ cd linux_armv7_gcc_cc4.9.2_libc2.19_kernel4.1.13_release

執行tbbvars.sh這支腳本程式檔,它會設定許多環境變數,之後的OpenCV才知道TBB在哪:
$ source tbbvars.sh

搞定TBB後,接著是OpenCV 安裝
$unzip opencv-2.4.9.zip
$ cd opencv
$mkdir build
$cd build

先執行cmake產生建置需要的設定檔:
$ cmake -DWITH_TBB:BOOL=TRUE -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

其中「-DWITH_TBB:BOOL=TRUE「代表我們想要使用TBB,「-D CMAKE_INSTALL_PREFIX=/usr/local」代表之後要安裝的路徑,最後的「..」代表原始碼所在路徑。
然後開始建制:
$make -j4

然後安裝:
$ sudo make install

執行指令更新程式庫:
$ sudo ldconfig

檢查OpenCV的版本:
$ pkg-config --modversion opencv

然後是是撰寫C++程式,顯示一張圖檔。新增檔案test.cpp,準備一張圖檔lena.jpg,程式內容如下:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>


using namespace cv;
using namespace std;

int main(int argc, char **argv)
{
 Mat image = imread("lena.jpg", CV_LOAD_IMAGE_COLOR);
 Mat imagegray = imread("lena.jpg", CV_LOAD_IMAGE_GRAYSCALE );//always convert image to the grayscale

 namedWindow("image",CV_WINDOW_AUTOSIZE);//AUTOSIZE 
 namedWindow("imagegray",CV_WINDOW_NORMAL);//Custom sizes
 imshow("image",image);
 imshow("imagegray",imagegray);
 resizeWindow("imagegray",320,240);
 waitKey(0);
 return 0;
}



編譯
g++ test.cpp -o test `pkg-config --cflags --libs opencv`

成功如下
參考資料
http://yehnan.blogspot.tw/2015/12/raspberry-piraspbianopencv.html
http://blogger.gtwang.org/2015/01/raspberry-pi-install-opencv.html 
http://stackoverflow.com/questions/9094941/compiling-opencv-in-c

沒有留言:

張貼留言