在上文已經學習過了opencv的編碼規則,爲了可以方便靈活的運用OPECV庫,咱們須要對其框架結構進行學習瞭解,以方便咱們進行實際工程調用調用。html
打開opencv源碼安裝的文件夾E:\opencv\opencv算法
能夠看到上述文件,很明顯,Opencv解壓後,提供給咱們一個編譯環境及工程的源碼環境以及使用的LICENSE。數組
打開build文件夾,能夠看到以下文件:網絡
其餘的文件夾都是一些編譯工具文件及兼容文件,這裏重點須要關注的是include文件夾,其內包含的就是庫文件包含的模塊文件,進入到include文件,能夠看到兩個文件夾,以下所示:數據結構
這裏的opencv包含的是C接口,opencv2包含的是C++接口。架構
進入到opencv,能夠看到以下文件,app
這裏C接口下的模塊功能說明以下:框架
進入opencv2能夠看到其下又有以下文件:機器學習
這裏對C++接口調用的模塊進行說明:ide
Mat
和全部其餘模塊使用的基本功能。
打開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文件夾能夠看到其下包含以下文件夾:
與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/ 模塊中的基礎算法。