以前啃了很多OpenCV的官方文檔,發現若是瞭解了一些OpenCV總體的模塊架構後,再重點學習本身感興趣的部分的話,就會有一覽衆山小的感受,因而,就決定寫出這篇文章,做爲啓程OpenCV系列博文的第二篇。算法
至於OpenCV組件結構的研究方法,咱們不妨管中窺豹,經過opencv安裝路徑下include目錄裏面頭文件的分類存放,來一窺OpenCV這些年迅猛發展起來的龐雜組件架構。數組
咱們進入到D:\ProgramFiles\opencv\build\include目錄,能夠看到有opencv和opencv2這兩個文件夾。顯然,opencv這個文件夾裏面包含着舊版的頭文件。而opencv2這個文件夾裏面包含着具備時代意義的新版OpenCV2系列的頭文件。網絡
在opencv這個文件夾裏面,也就是D:\Program Files\opencv\build\include\opencv目錄下,能夠看到以下的各類頭文件。這裏面大概就是opencv 1.0最核心的,並且保留下來的內容的頭文件,能夠把它們總體理解爲一個組件。數據結構
再來看看咱們重點關注的opencv2這邊,在D:\ProgramFiles\opencv\build\include\opencv2目錄下,咱們能夠看到這些文件夾:架構
咱們靈機一動,發現下面有個叫opencv_modules.hpp的hpp文件,一看就知道里面存放的是opencv2中的新模塊構造相關的說明代碼,打開一看,果不其然,定義的是OpenCV2全部組件的宏:框架
OK,就很少客套了,下面就是OpenCV的全部模塊介紹,按照順序來:dom
【calib3d】——其實就是就是Calibration(校準)加3D這兩個詞的組合縮寫。這個模塊主要是相機校準和三維重建相關的內容。基本的多視角幾何算法,單個立體攝像頭標定,物體姿態估計,立體類似性算法,3D信息的重建等等。機器學習
【contrib】——也就是Contributed/Experimental Stuf的縮寫, 該模塊包含了一些最近添加的不太穩定的可選功能,不用去多管。2.4.8裏的這個模塊有新型人臉識別,立體匹配,人工視網膜模型等技術。ide
【core】——核心功能模塊,包含以下內容:函數
- OpenCV基本數據結構
- 動態數據結構
- 繪圖函數
- 數組操做相關函數
- 輔助功能與系統函數和宏
- 與OpenGL的互操做
【imgproc】——Image和Processing這兩個單詞的縮寫組合。圖像處理模塊,這個模塊包含了以下內容:
- 線性和非線性的圖像濾波
- 圖像的幾何變換
- 其它(Miscellaneous)圖像轉換
- 直方圖相關
- 結構分析和形狀描述
- 運動分析和對象跟蹤
- 特徵檢測
- 目標檢測等內容
【features2d】 ——也就是Features2D, 2D功能框架 ,包含以下內容:
- 特徵檢測和描述
- 特徵檢測器(Feature Detectors)通用接口
- 描述符提取器(Descriptor Extractors)通用接口
- 描述符匹配器(Descriptor Matchers)通用接口
- 通用描述符(Generic Descriptor)匹配器通用接口
- 關鍵點繪製函數和匹配功能繪製函數
【flann】—— Fast Library for Approximate Nearest Neighbors,高維的近似近鄰快速搜索算法庫,包含兩個部分:
- 快速近似最近鄰搜索
- 聚類
【gpu】——運用GPU加速的計算機視覺模塊
【highgui】——也就是high gui,高層GUI圖形用戶界面,包含媒體的I / O輸入輸出,視頻捕捉、圖像和視頻的編碼解碼、圖形交互界面的接口等內容
【legacy】——一些已經廢棄的代碼庫,保留下來做爲向下兼容,包含以下相關的內容:
- 運動分析
- 指望最大化
- 直方圖
- 平面細分(C API)
- 特徵檢測和描述(Feature Detection and Description)
- 描述符提取器(Descriptor Extractors)的通用接口
- 通用描述符(Generic Descriptor Matchers)的經常使用接口
- 匹配器
【ml】——Machine Learning,機器學習模塊, 基本上是統計模型和分類算法,包含以下內容:
- 統計模型 (Statistical Models)
- 通常貝葉斯分類器 (Normal Bayes Classifier)
- K-近鄰 (K-NearestNeighbors)
- 支持向量機 (Support Vector Machines)
- 決策樹 (Decision Trees)
- 提高(Boosting)
- 梯度提升樹(Gradient Boosted Trees)
- 隨機樹 (Random Trees)
- 超隨機樹 (Extremely randomized trees)
- 指望最大化 (Expectation Maximization)
- 神經網絡 (Neural Networks)
- MLData
【nonfree】,也就是一些具備專利的算法模塊 ,包含特徵檢測和GPU相關的內容。最好不要商用,可能會被告哦。
【objdetect】——目標檢測模塊,包含Cascade Classification(級聯分類)和Latent SVM這兩個部分。
【ocl】——即OpenCL-accelerated Computer Vision,運用OpenCL加速的計算機視覺組件模塊
【photo】——也就是Computational Photography,包含圖像修復和圖像去噪兩部分
【stitching】——images stitching,圖像拼接模塊,包含以下部分:
- 拼接流水線
- 特色尋找和匹配圖像
- 估計旋轉
- 自動校準
- 圖片歪斜
- 接縫估測
- 曝光補償
- 圖片混合
【superres】——SuperResolution,超分辨率技術的相關功能模塊
【ts】——opencv測試相關代碼,不用去管他
【video】——視頻分析組件,該模塊包括運動估計,背景分離,對象跟蹤等視頻處理相關內容。
【Videostab】——Video stabilization,視頻穩定相關的組件,官方文檔中沒有多做介紹,無論它了。
看到到這裏,相信你們已經對OpenCV的模塊架構設計有了必定的認識。
OpenCV其實就是這麼多模塊做爲代碼容器組合起來的一個SDK而已,沒什麼稀奇的,對吧。