opencv3.x 代碼結構
OpenCV 3.x 與之前版本的不同
1)以C++ 風格API爲主,C 風格的API 最終可能會取消。
2)C++ API 更加簡潔,引入很多C++面向對象的特性
3) 算法都將繼承自 cv::Algorithm 接口。
4) 模塊分類細化,意義和功能明顯。
源代碼結構
1)3rdparty/,OpenCV 依賴的第三方庫,比如:ffmpeg,jpg、png、tiff等。
2)apps/,包含進行 haar 分類器訓練的工具,opencv 進行人臉檢測便是基於 haar 分類器。
3)cmake/,OpenCV工程編譯需要的cmake相關文件,用於智能搜索第三方庫。
4)include/,工程頭文件。其中,C 語言風格的API在opencv 子文件夾中 ,opencv2 子文件中有一個 opencv.hpp 文件, cv2.x和cv3.x推薦使用。
5)modules/,功能模塊核心代碼。
6)platforms/,交叉編譯所需的工具鏈及額外的代碼。
7)samples/,OpenCV的使用範例
8)data/, opencv 庫以及範例中用到的資源文件,例如人臉檢測的模型數據文件等。
9)doc/,編譯生成文檔所需文件及輔助腳本。
非GPU相關模塊
1)androidcamera/,android平臺相機設備相關接口。
2)core/,核心模塊,定義基本的數據結構,例如:Mat 類、XML 讀寫、opengl三維渲染等。
3)imgproc/,含圖像濾波、集合圖像變換、直方圖計算、形狀描述子等功能。
4)imgcodec/,各種格式的圖片的讀寫。
5)highgui/,高級圖形界面及與 QT 框架的整合。
6)video/,視頻分析相關模塊。包括背景提取、光流跟蹤、卡爾曼濾波等。
7)videoio/,視頻文件讀寫讀寫相關,包含攝像頭、Kinect 等的輸入。
8)calib3d/,相機標定及三維重建相關。相機標定用於消除廣角相機畫面畸變。三維重建,例如,在雙目視覺(立體視覺)中,基於兩個標定的攝像頭觀察同一個場景,計算兩幅畫面中的相關性來估算像素的深度。
9)features2d/, 2D 特徵值檢測的框架。包含各種特徵值檢測器及描述子,例如 FAST、MSER、OBRB、BRISK等。各類特徵值擁有統一的算法接口,因此在不影響程序邏輯的情況下可以進行替換。
10)objdetect/,物體檢測模塊。包括haar分類器、SVM檢測器及文字檢測。
11) ml/,機器學習相關。包括統計模型、K最近鄰、支持向量機、決策樹、神經網絡等經典的機器學習算法。
12)flann/,多維空間內聚類及搜索近似最近鄰的算法。
13)photo/,計算攝影學。包括圖像修補、去噪、HDR成像、非真實感渲染等。可實現類似Photoshop高級功能。
14)stitching/,圖像拼接,全景製作。
15)nonfree/,有專利的算法。如:SIFT和SURF。
16)shape/,形狀匹配相關模塊。用於描述形狀、比較形狀。
17)softcascade/,Soft Cascade 分類器物體檢測算法,含檢測和訓練模塊。
18)superres/,超分辨率相關,增強圖像的分辨率。
19)videostab/,視頻消除抖動相關,例如,用於解決相機移動時拍攝的視頻不穩定問題。
20)viz/,三維可視化模塊。一個簡單的三維可視化引擎,有各種UI控件和鍵盤、鼠標交互方式,底層實現基於 VTK 庫。
GPU相關模塊
模塊的名稱以 cuda 爲開始,cuda 是顯卡製造商 NVIDIA 推出的通用計算語言,cv3中有大量的模塊已基於cuda實現。
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/ 模塊中的基礎算法。
opencv4.0alpha最新消息
opencv4.0alpha即將發佈,在4.0alpha版本中增加了對神經網絡的更多支持,增加了二維碼的檢測與解碼的完整方案,增加了對SSE-4,AVX2和NEON的優化,此外4.0alpha版採用c++11,編譯器需要能夠支持c++11才行,循環可以採用parallel_for等lambda函數,parallel_for可以使用std::threads後端作爲並行計算方案。在4.0gold版本將全面刪除對opencv1.x中的c接口的支持。
參考文獻
1)http://blog.csdn.net/zkl99999/article/details/48676487
2)https://docs.opencv.org/4.0.0-alpha/
3)https://opencv.org/opencv-4-0-0-alpha.html