OpenCV庫框架結構 OpenCV總體的模塊架構

在上文已經學習過了opencv的編碼規則,爲了可以方便靈活的運用OPECV庫,咱們須要對其框架結構進行學習瞭解,以方便咱們進行實際工程調用調用。html

一、Opnecv庫到底提供了什麼?

  打開opencv源碼安裝的文件夾E:\opencv\opencv算法

   能夠看到上述文件,很明顯,Opencv解壓後,提供給咱們一個編譯環境及工程的源碼環境以及使用的LICENSE。數組

二、Opencv庫build文件夾說明

  打開build文件夾,能夠看到以下文件:網絡

其餘的文件夾都是一些編譯工具文件及兼容文件,這裏重點須要關注的是include文件夾,其內包含的就是庫文件包含的模塊文件,進入到include文件,能夠看到兩個文件夾,以下所示:數據結構

 

這裏的opencv包含的是C接口,opencv2包含的是C++接口。架構

三、C接口包含的模塊

進入到opencv,能夠看到以下文件,app

 

 這裏C接口下的模塊功能說明以下:框架

  •  CV:主要的OPENCV函數
  • CVAUX:輔助(實驗性的)的OpenCV函數
  • CXCORE: 數據結構與線性代數支持。
  • HIGHGUI:圖像界面函數。
  • ML:機器學習,包括模式分類和迴歸分析等。
  • CXEIGEN:圖形變換接口。
  • CXMISC:跨平臺通訊的接口模塊。

四、C++接口包含的模塊

進入opencv2能夠看到其下又有以下文件:機器學習

 

這裏對C++接口調用的模塊進行說明:ide

  • calib3d - 相機標定以及三維重建。相機標定用於去除相機自身缺陷致使的畫面形變,還原真實的場景,確保計算的準確性。三維重建一般用在雙目視覺(立體視覺),即兩個標定後的攝像頭觀察同一個場景,經過計算兩幅畫面中的相關性來估算像素的深度。
  • core - 一個定義基本數據結構的緊湊模塊,包括密集的多維數組Mat和全部其餘模塊使用的基本功能。
  • dnn - 深度學習相關的模塊,該模塊的功能僅適用於正向傳遞計算(即網絡測試)。原則上不支持網絡培訓。
  • features2d - 包含 2D 特徵值檢測的框架。包含各類特徵值檢測器及描述子,例如 FAST、MSER、OBRB、BRISK等。各種特徵值擁有統一的算法接口,所以在不影響程序邏輯的狀況下能夠進行替換。
  • flann-最近鄰開源庫,用於在多維空間內聚類及搜索的近似算法,作圖像檢索的讀者對它不會陌生。
  • highgui - 一個易於使用的視頻捕獲,圖像和視頻編解碼器界面,以及簡單的UI功能。高級圖形界面及與 QT 框架的整合。
  • imgcodecs - 一個用於讀寫圖像的易用接口,負責各類格式的圖片的讀寫,這個模塊是從之前的 highgui 中剝離的。
  • imgproc - 一個圖像處理模塊,包括線性和非線性圖像過濾,幾何圖像變換(調整大小,仿射和透視變形,基於通用表的從新映射),顏色空間轉換,直方圖等。
  • ml- 機器學習相關模塊,包括統計模型、K最近鄰、支持向量機、決策樹、神經網絡等經典的機器學習算法。
  • objdetect - 檢測預約義類的對象和實例(例如,面部,眼睛,馬克杯,人,汽車等)。物體檢測模塊。包括haar分類器、SVM檢測器及文字檢測。
  • photo-包含計算攝影學, 包括圖像修補、去噪、HDR成像、非真實感渲染等。若是想實現Photoshop的高級功能,那麼這個模塊必不可少。
  • shape-形狀距離和匹配。用於描述形狀、比較形狀。
  • stitching-用於圖像拼接,可用於製做全景圖。
  • superres-超分辨率,用於加強圖像的分辨率。
  • video- 視頻分析模塊,包括運動估計,背景減法和對象跟蹤算法。視頻分析模塊。包括背景提取、光流跟蹤、卡爾曼濾波等,作視頻監控的讀者會常用這個模塊。
  • videoio-對於視頻捕獲和視頻編碼器是一個易用的接口。負責視頻文件的讀寫,也包括攝像頭、Kinect 等的輸入。
  • videostab-視頻穩定,用於解決相機移動時拍攝的視頻不夠穩定的問題。
  • gpu - 來自不一樣OpenCV模塊的GPU加速算法。

 

五、Opencv庫source源碼文件夾

 打開opencv下的source文件夾,能夠看到以下文件:

 

3rdparty/,包含第三方的庫,好比視頻解碼用的 ffmpeg,jpg、png、tiff等圖片的開源解碼庫。

apps/,包含進行 haar 分類器訓練的工具,opencv 進行人臉檢測即是基於 haar 分類器。若是你想檢測人臉之外的圖片,千萬不要錯過這幾個工具。

cmake/,包含生成工程項目時 cmake 的依賴文件,用於智能搜索第三方庫,普通開發者不須要關心這個文件夾的內容。

data/,包含 opencv 庫以及範例中用到的資源文件,haar 物體檢測的分類器位於haarcascades子文件中。

doc/,包含生成文檔所需的源文件以及輔助腳本。

include/,包含入口頭文件。opencv 子文件夾中是 C 語言風格的API,也就是《Learning OpenCV (初版)》中描述的API函數,官方將逐漸淘汰 C 風格函數,所以我不推薦你們使用該文件夾中的頭文件。opencv2 子文件中只有一個 opencv.hpp 文件,這是 cv2 以及     cv3 推薦使用的頭文件。

modules/,包含核心代碼,opencv 真正的代碼都在這個文件夾中。opencv 從2.0開始以模塊的方式組織各類功能,近兩年模塊的數量增加得很快,後面我會依次介紹每一個模塊的做用。

platforms/,包含交叉編譯所需的工具鏈以及額外的代碼,交叉編譯指的是在一個操做系統中編譯供另外一個系統使用的文件。

samples/,範例文件夾,包含大量學習案例。

六、modules模塊源碼

  進入modules文件夾能夠看到其下包含以下文件夾:

與build下的include相比,這裏源碼多了:

viz:三維可視化模塊。能夠認爲這個模塊實現了一個簡單的三維可視化引擎,有各類UI控件和鍵盤、鼠標交互方式。底層實現基於 VTK 這個第三方庫。

cuda/,CUDA-加速的計算機視覺算法,包括數據結構 cuda::GpuMat、 基於cuda的相機標定及三維重建等。

cudaarithm/,CUDA-加速的矩陣運算模塊。

cudabgsegm/,CUDA-加速的背景分割模塊,一般用於視頻監控。

cudacodec/,CUDA-加速的視頻編碼與解碼。

cudafeatures2d/,CUDA-加速的特徵檢測與描述模塊,與features2d/模塊功能相似。

cudafilters/,CUDA-加速的圖像濾波。

cudaimgproc/,CUDA-加速的圖像處理算法,包含直方圖計算、霍夫變換等。

cudaoptflow/,CUDA-加速的光流檢測算法。

cudastereo/,CUDA-加速的立體視覺匹配算法。

cudawarping/,實現了 CUDA-加速的快速圖像變換,包括透視變換、旋轉、改變尺寸等。

cudaev/,實現 CUDA 版本的核心功能,相似 core/ 模塊中的基礎算法。

 

 

 

參考資料:

一、OpenCV官方資料

二、OpenCV總體的模塊架構

三、OpenCV 2.4.13.7 documentation

四、flann手冊 pdf 

五、OpenCV模塊庫簡單介紹

相關文章
相關標籤/搜索