為了更全面的瞭解OpenCV,首先需要了解OpenCV的整體模組架構,對每個模組的功能有個初步認識,之後才能在後續的學習中知道每個功能函數出自於哪個模組,在原有功能的基礎上進行調整與改進。本節將帶讀者瞭解OpenCV 4.1的模組架構,介紹每個模組的主要功能。
開啟OpenCV 4.1的資料夾,在“...\opencv\build\include”資料夾中只有一個名為opencv2的資料夾。這裡需要再次重點說明,在OpenCV 4之前的版本中,該資料夾下有opencv和opencv2兩個資料夾,而在OpenCV 4中將兩者整合成opencv2一個資料夾。開啟opencv2資料夾就可以看到OpenCV 4.1的模組架構,如圖1-20所示。
圖1-20 OpenCV 4.1的模組架構
這些模組有的經過多個版本的更新已較為完善,包含了較多的功能;有的模組還在逐漸的發展中,包含的功能相對較少。接下來將按照資料夾的順序介紹模組的功能。
【calib3d】——這個模組名稱是由calibration(校準)和3D這兩個單詞的縮寫組合而成,透過名字我們可以知道,模組主要包含相機標定與立體視覺等功能,例如物體位姿估計、三維重建、攝像頭標定等。
【core】——核心功能模組,模組主要包含 OpenCV 庫的基礎結構以及基本操作,例如OpenCV基本資料結構、繪圖函式、陣列操作相關函式、動態資料結構等。
【dnn】——深度學習模組,這個模組是OpenCV 4版本的一個特色,其主要包括構建神經網路、載入序列化網路模型等。但是該模組目前僅適用於正向傳遞計算(測試網路),原則上不支援反向計算(訓練網路)。
【features2d】——這個模組名稱是由features(特徵)和2D這兩個單詞的縮寫組合而成,其功能主要為處理影象特徵點,例如特徵檢測、描述與匹配等。
【flann】——這個模組名稱是Fast Library for Approximate Nearest Neighbors(快速近似最近鄰庫)的縮寫,這個模組是高維的近似近鄰快速搜尋演算法庫,主要包含快速近似最近鄰搜尋與聚類等。
【gapi】——這個模組是OpenCV 4.0中新增加的模組,旨在加速常規的影象處理,與其他模組相比,這個模組主要充當框架而不是某些特定的計算機視覺演算法。
【highgui】——高層GUI圖形使用者介面,包含建立和操作顯示影象的視窗、處理滑鼠事件以及鍵盤命令、提供圖形互動視覺化介面等。
【imgcodecs】——影象檔案讀取與儲存模組,主要用於影象檔案讀取與儲存。
【imgproc】——這個模組名稱是由image(影象)和process(處理)兩個單詞的縮寫組和而成,是重要的影象處理模組,其主要包括影象濾波、幾何變換、直方圖、特徵檢測與目標檢測等。
【ml】——機器學習模組,主要為統計分類、迴歸和資料聚類等。
【objdetect】——目標檢測模組,主要用於影象目標檢測,例如檢測Haar特徵。
【photo】——計算攝影模組,主要包含影象修復和去噪等。
【stitching】——影象拼接模組,主要包含特徵點尋找與匹配影象、估計旋轉、自動校準、接縫估計等影象拼接過程的相關內容。
【video】——影片分析模組,主要包含運動估計、背景分離、物件跟蹤等影片處理相關內容。
【videoio】——影片輸入輸出模組,主要用於讀取與寫入影片或者影象序列。
透過對OpenCV 4.1的模組構架的介紹,相信讀者已經對OpenCV 4.1整體架構有了一定的瞭解。其實簡單來說OpenCV就是將眾多影象處理模組整合在一起的軟體開發包(Software Development Kit,SDK),其自身並不複雜,只要透過學習都可以輕鬆掌握其使用方式。