OpenCV學習

Dream_yz發表於2016-02-28

OpenCV3較OpenCV2改變

1)C風格的API完全被C++的API代替,程式碼更加簡潔,不易出錯。C++的API將更加簡潔。

2)所有的演算法都將繼承自cv::Algorithm介面。

3)大型的模組將拆分為小的模組。


OpenCV應用層語言

Python、Java、C


OpenCV作業系統:

Windows、Linux、MacOSx、IOS、Android、WinRTx


硬體

GPU、x86、x64、ARM、MIPS


OpenCV中執行緒

Concurrency:Windows

GCD:MacOSx、IOS

TBB:Windows、MacOSx、Linux、Android、(WinRT)


OpenCV程式設計中使用的加速手段

針對GPU的加速:CUDA、OpenCL

針對x86和x64加速:OpenCL、SSE/AUX

針對ARM加速:NEON

1)TBB:並行程式設計,針對多執行緒,多核處理器。TBB主要功能:並行演算法,任務排程,並行容器,同步原語,記憶體分配器。

2)IPP:(高度手工優化程式碼),多核並行,用於優化OpenCV效能。

3)OpenMP:實現跨平臺共享記憶體式多執行緒併發。

4)SSE加速:主要SEE指令進行加速。

5)CUAD(統一計算架構):針對GPU程式設計實行平行計算。

OpenCL:架構平臺編碼的程式框架,異構平臺可由CPU、GPU、DSP、FPGA或其他型別的處理器與硬體加速器組成。


OpenCV各模組總結:

1)opencv_core模組:程式庫的核心功能,特別是基本的資料結構和演算法函式;(OpenCV基本資料結構,動態資料結構,繪圖函式,陣列操作相關函式,輔助功能與系統函式和巨集,與OpenGL的互操作等)

2)opencv_imgproc模組:影像處理函式;(線性和非線性的影像濾波,影像幾何變換,其它影像轉換,直方圖相關,結構分析和形狀描述,運動分析和物件跟蹤,特徵檢測,目標檢測等)

3)opencv_highgui模組:影像、視訊讀寫函式和部分使用者介面函式;(高層GUI圖形使用者介面,包含媒體的I/O輸入輸出,視訊捕捉,影像和視訊的編解碼,圖形互動介面介面等)

4)opencv_features2d模組:特徵點檢測器、描述子以及特徵點匹配框架;(特徵檢測和描述子,特徵檢測器通用介面,描述符提取器通用介面,描述符匹配器通用介面,通用描述符匹配器通用介面,關鍵點繪製函式和匹配功能繪製函式等)。

5)opencv_calib3d模組:相機標定、雙視角幾何估計及立體函式;(相機校準和三維重建相關內容,如多視角幾何演算法,單個立體攝像頭標定,物體姿態估計,立體相似性演算法,3D資訊重建等)

6)opencv_video模組:運動估計、特徵跟蹤及前景提取函式和類;(視訊分析元件,該模組包括運動估計,背景分離,物件跟蹤等視訊處理相關內容)

7)opencv_objdetect模組:目標檢測函式;(Cascade Classification級聯分類器和Latent SVM等)

8)openc_ml模組:機器學習函式;(基本統計模型和分類演算法)

9)opencv_flann模組:計算幾何演算法;(高維的近似近鄰快速搜尋演算法庫,主要是快速近似最近鄰搜尋和聚類)

10)opencv_gpu模組:GPU加速程式碼等。

11)open_photo模組:影像修復和去噪模組。


OpenCV機器學習庫中主要實現演算法如下:

1)一般貝葉斯分類器(Normal Bayes Classifier):CvNormalBayesClassifier

2)K近鄰分類(K-nearest Neighbor Classifier): CvKNearest

3)支援向量機(Support Vector Machine):CvSVM        

4)期望最大化(Expection Maximization): EM

5)決策樹(Decision Tree):CvDTree

6)隨機森林(Random Treess Classifier):CvForestTree

7)超隨機樹分類器(Extremely randomized trees Classifier): CvERTrees

8)Boost分類器(Boosted tree Classifier):  CvBoost

9)梯度下降Boost分類器(Gradient Boosted Trees):CvGBTrees 

10)神經網路(Artificial Neural Networks): CvANN_MLP

其中每種演算法實現的主要函式如下:

1)資料處理:主要是獲得訓練樣本和測試樣本資料等

2)分類器初始引數設定:主要是設定分類器訓練前的初始引數資訊等

3)訓練:主要是利用1)中訓練樣本和2)中的相關引數,進行迭代訓練,直到得到滿足條件的分類器

4)預測,分類:主要是利用3)中訓練得到的分類器對樣本進行分類預測等。

5)分類器讀寫儲存:主要完成從檔案節點中讀取分類器相關資訊以及將訓練得到的分類器相關資訊儲存到檔案中等。


OpenCV中CUAD加速模組介紹

1)cuda:CUDA-加速的計算機視覺演算法,包括資料結構cuda:GpuMat,基於cuda的相機標定及三維重建等。

2)cudaarithm:CUDA-加速的矩陣運算模組。

3)cudabgsegm:CUDA-加速的背景分割模組,通常用於視訊監控。

4)cudacodec:CUDA-加速的視訊編碼與解碼。

5)cudafeatures2d:CUDA-加速的特徵檢測與描述模組,與features2d/模組功能類似。

6)cudafilters/:CUDA-加速的影像濾波。

7)cudaimgproc/:CUDA-加速的影像處理演算法,包括直方圖計算,霍夫變換等。

8)cudaoptflow/:CUDA-加速的光流檢測演算法。

9)cudastereo/:CUDA-加速的立體視覺匹配演算法。

10)cudawarping/:CUDA-加速的快速影像變換,如透視變換、旋轉、改變尺寸等。

11)cudaev/:CUDA核心功能,類似core/模組中的基礎演算法。


OpenCV3.1增加功能

1)opencv_contrib/ccalib    全方位攝像機標定和立體三維重建 

2)opencv_contrib/sfm module    從運動資訊中恢復三維場景結構

3)opencv_contrib/dpm module    改進的變形部件為基礎的模型    

4)opencv_contrib/tracking module    採用核心化相關濾波實時多目標跟蹤

5)opencv_contrib/text module    改進和擴充套件場景文字探測

6)opencv_contrib/stereo module    立體匹配的改進

7)opencv_contrib/structured_light    結構關係標定

8)opencv_contrib/aruco    運用棋盤 + ArUco庫標定攝像頭

9)opencv_contrib/dnn module    深度神經網路框架的通用介面的實現

10)opencv_contrib/calib3d and opencv_contrib/ximgproc    邊緣意思過濾的最新進展,改進SGBM立體演算法

11)opencv_contrib/xobjdetect    改進的ICF檢測,WaldBoost實現

12)opencv_contrib/tracking module    多目標TLD演算法跟蹤

13)opencv_contrib/cnn_3dobj    3D姿態估計使用細胞神經網路



相關文章