0x01 認識 OpenCV
OpenCV 官網主頁 : https://opencv.org
OpenCV github 主頁 : https://github.com/opencv
OpenCV 中文網 : http://www.opencv.org.cn
0x02 OpenCV 基本架構分析
官網下載 OpenCV , 解壓放到 D 盤, 進入到 目錄, 可以看到有 和 兩個文件夾。 裡面包含了舊版的頭文件, 而 則包含了新版的穩定的 OpenCV2 系列頭文件。
裡面 11 個頭文件, 大概是 OpenCV 1.0 最核心的, 我們可以理解為一個大組件。
再來看看 裡面的文件很多, 其中會有一個 的 hpp 文件, 裡面是 OpenCV 所有組件的宏, 具體如下。
按照宏定義的順序依次介紹。如下:
1. 「 calib3d 」 Calibration(校準) 和 3D 這兩個片語合縮寫。 該模塊主要是相機校準和三維重建相關的內容, 包括基本的多視角幾何演算法、單個立體攝像頭標定、物體姿態估計、立體相似性演算法、3D 信息的重建等。
2. 「 contrib 」 contributed/Experimental Stuf 的縮寫。 該模塊包含了一些近期添加的可選性功能, 不用去多管, 例如新增的 人臉識別、立體匹配、人工視網膜模型等技術。
3. 「 core 」核心功能模塊, 包含了下面的內容。
OpenCV 基本數據結構。
動態數據結構。
繪圖函數。
數組操作相關函數。
輔助功能與系統函數和宏。
與 OpenGL 的互操作。
4. 「 imgproc 」 image 和 process 兩個單詞的縮寫組合。 圖像處理模塊, 包含以下內容。
線性和非線性的圖像濾波。
圖形幾何變換。
其他 (Miscellaneous) 圖像轉換。
直方圖相關。
結構分析和形狀描述。
運動分析和對象跟蹤。
特徵檢測。
目標檢測等內容。
5. 「 features2d 」 Features2D, 即 2D 功能框架, 包含如下內容。
特徵檢測和描述。
特徵檢測器 (Feature Detectors) 通用介面。
描述符提取器 (Descriptor Extractors) 通用介面。
描述符匹配器 (Descriptor Matchers) 通用介面。
通用描述符 (Generic Descriptor) 匹配器通用介面。
關鍵點繪製函數和匹配功能繪製函數。
6.「 flann 」 Fast Library for Approximate Nearest Neighbors, 高維的近似近鄰快速搜索演算法庫, 包含以下兩個部分:
7. 「 gpu 」運用 GPU 加速的計算機視覺模塊。
8. 「 highgui 」 高層 GUI 圖形用戶界面, 包含了媒體的輸入輸出、視頻捕捉、圖像和視頻的編碼解碼、圖形交互界面的介面等內容。
9. 「 legacy 」 一些廢棄的代碼庫, 保留下來作為向下兼容, 包含如下內容:
運動分析。
期望最大化。
直方圖。
平面細分(C API)。
特徵檢測和描述 (Feature Detection and Description)。
描述符提取器 (Descriptor Extractors) 的通用介面。
通用描述符 (Generic Descriptor Matchers) 的常用介面。
匹配器。
10. 「 ml 」Machine Learning, 機器學習模塊, 基本上是統計模型和分類演算法, 包含如下內容:
統計模型 (Statistical Models)。
一般貝葉斯分類器 (Normal Bayes Classifier)。
K-近鄰 (K-Nearest Neighbors)。
支持向量機 (Support Vector Machines)。
決策樹 (Decision Trees)。
提升 (Boosting)。
梯度提高樹 (Gradient Boosted Trees)。
隨機樹 (Random Trees)。
超隨機樹 (Extremely randomized trees)。
期望最大化 (Expectation )。
神經網路 (Neural Networks)。
MLData 。
11. 「 nonfree 」 一些專利的演算法模塊, 包含特徵檢測和 GPU 相關的內容, 最好不要商用。
12. 「 objdetect 」 目標檢測模塊, 包含 Cascade Classification(級聯分類) 和 Latent SVM 這兩個部分。
13. 「 ocl 」 OpenCL-accelerated Computer Vision, 運用 OpenCL 加速的計算機視覺組件模塊。
14. 「 photo 」 Computational Photography, 包含了圖像修復和圖像去噪兩部分。
15. 「 stiching 」 images stitching, 圖像拼接模塊, 包含以下部分:
拼接流水線。
特點尋找和匹配圖像。
估計旋轉。
自動校準。
圖片歪斜。
接縫估測。
曝光補償。
圖片混合。
16. 「 superres 」 SuperResolution, 超解析度技術的相關功能模塊。
17. 「 ts 」 OpenCV 測試相關代碼, 不用去管。
18. 「 video 」 視頻分析組件, 該模塊包含運動估計、背景分離、對象跟蹤等視頻處理相關內容。
19. 「 Videostab 」 Video stabilization, 視頻穩定相關的組件, 官方文檔中沒有多做介紹, 不用管它。
這樣一來, 對 OpenCV 的模塊框架就有了一定的認識, 其實就是很多個模塊組合起來的一個 軟體包, 也叫 SDK (Software Development Kit, 軟體開發工具包) 並沒有多稀奇。
OpenCV 2.0 的發布也就意味著 OpenCV2 時代的來臨。 2 帶來了全新的 C++ 介面, 同時新增了新的平台支持, 包括 iOS 和 Android, 通過 CUDA 和 OpenCL 實現了 GPU 加速, 為 Python 和 Java 用戶提供了介面。都說穩定易用的OpenCV 2.4.x。
0x03 架構的改變
然而隨著功能的增加, OpenCV 主體集成了各種各樣的功能模塊, 變得越來越臃腫。 這時, 3.0 的出現, 就是為了造福人類 。 OpenCV3 決定像其他大項目一樣, 拋棄整體架構, 使用內核 + 插件的架構形式。
在 GitHub 主頁, 可以看到除了一個 倉庫, 還有一個 倉庫顯示在上方。這個新倉庫中有很多好玩的功能 : 包括臉部識別和文本探測, 以及文本識別、新的邊緣檢測器、充滿藝術感的圖像修復、深度地圖處理、新的光流和追蹤演算法等。
opencv 和 opencv_contrib 倉庫的區別
都由 OpenCV 官網開發團隊持續集成系統維護, 雖然可能新的倉庫很多功能不穩定。
opencv 倉庫在 GitHub 中由 Itseez 提供, 其有著非常穩定的 API 以及少部分的創新。
opencv_contirb 倉庫是大多數實驗性代碼放置的地方, 一些 API 可能會有改變, 一直會歡迎廣大開發者們貢獻新的精彩演算法。
opencv_contirb 中這些額外模塊可以在 CMake 中使用 傳遞給 CMake 文件, 和 OpenCV3 主體中的代碼一起編譯運行。
opencv_contirb 的文檔是自動生成的, 在 GitHub 倉庫 readme.md 也包含了, https://docs.opencv.org/master/ 。
0x04 實踐
首先 Windows 下需要安裝 visual studio , 我選擇的是 2012 + OpenCV2.4.13, 2.4.x 相對來說穩定。
將 opencv2.4.13 下載到電腦, 直接解壓放到 D 盤 根目錄, 使用了 淺墨 的 HelloOpenCV 工程項目。 需要注意, 工程下載過來, 還需要根據自己的電腦配置環境變數, 項目裡面需要配置通用屬性。
通用屬性配置 :
VC++ Directories , 配置 Include 目錄和 Library 目錄。
鏈接庫輸入配置: Linker->Input 輸入一堆
2.4.13 輸入如下 :
這樣就能跑起來了, 環境變數需要根據自己電腦解壓的目錄進行設置。
此篇作為學習 OpenCV 的第一篇, 堅持學習下去。
喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!
本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧! 請您繼續閱讀更多來自 全球大搜羅 的精彩文章: