1、OpenCV的簡介
開源的計算機視覺類庫OpenCV( IntelÒ Open Source Computer Vision Library)由英特爾公司位于俄羅斯的研究實驗室所開發,它是一套可免費獲得的由一些C 函數和C ++ 類所組成的庫,用來實作一些常用的圖像處理及計算機視覺算法]。由于OpenCV 的源代碼是完全開放的,而且源代碼的編寫簡潔而又高效,特别是其中大部分的函數都已經過彙編最優化,以使之能高效而充分地利用Intel系列處理晶片的設計體系,OpenCV 的代碼執行效率是非常高的,是以近年來在國外的圖像處理相關領域中被廣泛地使用,成為一種流行的圖像處理軟體。
2.1.1 OpenCV 的特點
相對于其它常用的圖像處理軟體來說,OpenCV有其顯著的不可比拟的優點,主要展現在如下幾個方面[1]:
(1)OpenCV是一個包含了超過300 個C 函數的應用程式設計接口,它不依賴于外部庫,既可以獨立運作,也可在運作時使用其它外部庫。
(2)高性能:OpenCV 中所有的算法都是基于封裝于IPL 的具有很高靈活性的動态資料結構,而且其中有一半以上的函數在設計及彙編時被Intel 公司針對其所生産的處理器進行了優化。
(3)開放性:不管對于商業的還是非商業的用途,OpenCV都是完全免費的,其源代碼完全開放,開發者可以對源代碼進行修改,将自己設計的新類添加到庫中,隻要設計符合規範,自己的代碼也可以被别人廣泛使用。
(4)可移植性:由于OpenCV的大部分庫函數基本上采用C或C++語言編寫,是以可以友善地移植到其它如ARM、MPIS等嵌入式微處理器中。
2.1.2 OpenCV 的函數體系
OpenCV 中每個函數的命名都以“cv”開始,然後是該函數的行為及目标。例如用來建立圖像的函數“cvCreateImage”,載入圖像的函數“cvLoadImage”。OpenCV是為圖像處理及計算機視覺在實際工程中的應用而設計的一個類庫,其中所有的函數都由于其在實際應用中所實作的不同的功能而分屬不同的類型,主要的函數類型有:
(1)基本的圖像處理與分析函數:這個類型的函數主要用于實作一些基本的圖像處理與分析功能,例如圖像平滑函數cvSmooth,Sobel 算子cvSobel,Canny 邊緣分割函數cvCanny 等。
(2)結構分析函數:包括有輪廓處理函數,幾何學函數以及平面細分函數。
(3)運動分析與目标跟蹤函數:包括有用于運動分析與目标跟蹤的函數,例如背景重建函數cvAcc,用光流法或動态輪廓模型來實作目标跟蹤的函數cvCalcOpticalFlowBM 和cvSnakeImage 以及卡爾曼濾波函數CvKalman等。
(4)錄影機标定和3D 重建函數:包括有用于錄影機标定,姿态估計以及從兩個錄影機進行3D 相似重構的函數。
(5)GUI 與視訊處理函數:包括有進階圖形使用者接口highGUI 用以實作對圖像的載入、顯示及儲存等基本操作以及用以實作視訊輸入輸出及處理的函數。
根據上述的函數體系,程式開發者可以根據自己所開發應用程式所要實作的功能來友善地選擇所需的庫函數,進而大大減少開發時間和精力,縮短程式開發的周期。
2、Opencv移植
linux 下 opencv2.0.0 的移植 (ARM11)
環境:
PC機系統:Fedora 8
交叉編譯工具 :arm-linux-gcc-4.5.1
解壓:OpenCV-2.0.0.tar.bz2
#cd OpenCV-2.0.0
#./configure --host=arm-linux --without-gtk --without-carbon
--without-quicktime --without-1394libs --without-ffmpeg
--without-python --without-swig --enable-static --enable-shared
--disable-apps CXX=arm-linux-g++ CPPFLAGS=-I/opt/FriendlyARM/too
lschain/4.5.1/arm-none-linux-gnueabi/include LDFLAGS=-L/opt/Frie
ndlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib --with-v4l2
--prefix=/opt/arm-2.0.0/opencv
#make
#make install
? --host=arm-linux 指定主機
? --without-gtk: 不編譯gtk
? --without-carbon:
? --without-quicktime
? --without-1394libs
? --without-ffmpeg
? --without-python
? --without-swig
? --enable-static 編譯靜态庫*.a檔案
? --enable-shared 編譯為動态庫*.so檔案
? CXX=arm-linux-g++
? CPPFLAGS=-I/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include:OpenCV會用到一些dev的包,如png.h,jpeglib.h頭,大部分檔案在/usr/include下。
? LDFLAGS=-L/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib
? --prefix=/opt/arm/opencv 安裝編譯好的庫檔案頭檔案存放的位置
3、移植庫到ARM11闆子
将/opt/arm/opencv/lib裡的
libcvaux.so.4.0.0
libcv.so.4.0.0
libcxcore.so.4.0.0
libhighgui.so.4.0.0
libml.so.4.0.0
拷出來全部重命名
*.so.4
将這些檔案拷貝到ARM11闆子的/lib目錄下。。。
4、測試是否一緻成功。。。
arm-linux-g++ XX.c -o XX -I/opt/arm-2.0.0/opencv/include/opencv -L/opt/arm-2.0.0/opencv/lib/ -lcv -lcxcore -lcvaux -lml -lhighgui
Then , Enjoy........
本文轉自 驿落黃昏 51CTO部落格,原文連結:http://blog.51cto.com/yiluohuanghun/1181683,如需轉載請自行聯系原作者