一篇文章梳理清楚 Python OpenCV 的知識體系

作者:夢想橡皮擦
來源:夢想橡皮擦
觀前提醒,本篇文章涉及知識點巨大,建議先收藏,再慢慢學(xué)習(xí)。
本篇文章目的將為你詳細(xì)羅列 Python OpenCV 的學(xué)習(xí)路線與重要知識點。核心分成 24 個小節(jié)點,全部掌握,OpenCV 入門階段就順利通過了。
1. OpenCV 初識與安裝
2. OpenCV 模塊簡介
3. OpenCV 圖像讀取,顯示,保存
4. 攝像頭和視頻讀取,保存
5. OpenCV 常用數(shù)據(jù)結(jié)構(gòu)和顏色空間
6. OpenCV 常用繪圖函數(shù)
7. OpenCV 界面事件操作之鼠標(biāo)與滑動條
8. 圖像像素、通道分離與合并
9. 圖像邏輯運算
10. 圖像 ROI 與 mask 掩膜
11. 圖像幾何變換
12. 圖像濾波
13. 圖像固定閾值與自適應(yīng)閾值
14. 圖像膨脹腐蝕
15. 邊緣檢測
16. 霍夫變換
17. 圖像直方圖計算及繪制
18. 模板匹配
19. 輪廓查找與繪制
20. 輪廓特征屬性及應(yīng)用
21. 高級部分-分水嶺算法及圖像修補(bǔ)
22. GrabCut & FloodFill 圖像分割、角點檢測
23. 特征檢測與匹配
24. OpenCV 應(yīng)用部分之運動物體跟蹤與人臉識別
1. OpenCV 初識與安裝
本部分要了解 OpenCV (Open Source Computer Vision Library)的相關(guān)簡介,OpenCv 可以運行在多平臺之上,輕量級而且高效,由一系列 C 函數(shù)和少量 C++類構(gòu)成,提供了 Python、Ruby、MATLAB 等語言的接口,所以在學(xué)習(xí)的時候,要注意查閱資料的語言實現(xiàn)相關(guān)問題。
這個階段除了安裝 OpenCV 相關(guān)庫以外,建議收藏官方網(wǎng)址,官方手冊,官方入門教程,這些都是最佳的學(xué)習(xí)資料。
模塊安裝完畢,需要重點測試 OpenCV 是否安裝成功,可通過 Python 查詢安裝版本。
2. OpenCV 模塊簡介
先從全局上掌握 OpenCV 都由哪些模塊組成。例如下面這些模塊,你需要找到下述模塊的應(yīng)用場景與簡介。
core、imgproc、highgui、calib3d、features2d、contrib、flann、gpu、legacy、ml、objdetect、photo、stitching。
整理每個模塊的核心功能,并完成第一個 OpenCV 案例,讀取顯示圖片。
3. OpenCV 圖像讀取,顯示,保存
安裝 OpenCV 之后,從圖像獲取開始進(jìn)行學(xué)習(xí),包含本地加載圖片,相機(jī)獲取圖片,視頻獲取,創(chuàng)建圖像等內(nèi)容。
只有先獲取圖像之后,才能對圖像進(jìn)行操作處理,信息提取,結(jié)果輸出,圖像顯示,圖像保存。
對于一個圖像而言,在 OpenCV 中進(jìn)行讀取展示的步驟如下,你可以將其代碼進(jìn)行對應(yīng)。
圖像讀取; 窗口創(chuàng)建; 圖像顯示; 圖像保存; 資源釋放。
涉及需要學(xué)習(xí)的函數(shù)有 cv2.imread()、cv2.namedWindow()、cv2.imshow()、cv2.imwrite()、cv2.destroyWindow()、cv2.destroyAllWindows()、 cv2.imshow()、cv2.cvtColor()、cv2.imwrite()、cv2.waitKey()。
4. 攝像頭和視頻讀取,保存
第一個要重點學(xué)習(xí) VideoCapture 類,該類常用的方法有:
open() 函數(shù); isOpened() 函數(shù); release() 函數(shù); grab() 函數(shù); retrieve() 函數(shù); get() 函數(shù); set() 函數(shù);
除了讀取視頻外,還需要掌握 Opencv 提供的 VideoWriter 類,用于保存視頻文件。
學(xué)習(xí)完相關(guān)知識之后,可以進(jìn)行這樣一個實驗,將一個視頻逐幀保存為圖片。
5. OpenCV 常用數(shù)據(jù)結(jié)構(gòu)和顏色空間
這部分要掌握的類有 Point 類、Rect 類、Size 類、Scalar 類,除此之外,在 Python 中用 numpy 對圖像進(jìn)行操作,所以 numpy 相關(guān)的知識點,建議提前學(xué)習(xí),效果更佳。
OpenCV 中常用的顏色空間有 BGR 顏色空間、HSV/HLS 顏色空間、Lab 顏色空間,這些都需要了解,優(yōu)先掌握 BGR 顏色空間。
6. OpenCV 常用繪圖函數(shù)
掌握如下函數(shù)的用法,即可熟練的在 Opencv 中繪制圖形。
cv2.line(); cv2.circle(); cv2.rectangle(); cv2.ellipse(); cv2.fillPoly(); cv2.polylines(); cv2.putText()。
7. OpenCV 界面事件操作之鼠標(biāo)與滑動條
第一個要掌握的函數(shù)是鼠標(biāo)操作消息回調(diào)函數(shù),cv2.setMouseCallback() ,滑動條涉及兩個函數(shù),分別是:cv2.createTrackbar() 和 cv2.getTrackbarPos()。
掌握上述內(nèi)容之后,可以實現(xiàn)兩個案例,其一為鼠標(biāo)在一張圖片上拖動框選區(qū)域進(jìn)行截圖,其二是通過滑動條讓視頻倍速播放。
8. 圖像像素、通道分離與合并
了解圖像像素矩陣,熟悉圖片的像素構(gòu)成,可以訪問指定像素的像素值,并對其進(jìn)行修改。
通道分離函數(shù) cv2.split(),通道合并函數(shù) cv2.merge()。
9. 圖像邏輯運算
掌握圖像之間的計算,涉及函數(shù)如下:
cv2.add(); cv2.addWeighted(); cv2.subtract(); cv2.absdiff(); cv2.bitwise_and(); cv2.bitwise_not(); cv2.bitwise_xor()。
還可以研究圖像乘除法。
10. 圖像 ROI 與 mask 掩膜
本部分屬于 OpenCV 中的重點知識,第一個為感興趣區(qū)域 ROI,第二個是 mask 掩膜(掩碼)操作 。
學(xué)習(xí) ROI 部分時,還可以學(xué)習(xí)一下圖像的深淺拷貝。
11. 圖像幾何變換
圖像幾何變換依舊是對基礎(chǔ)函數(shù)的學(xué)習(xí)與理解,涉及內(nèi)容如下:
圖像縮放 cv2.resize(); 圖像平移 cv2.warpAffine(); 圖像旋轉(zhuǎn) cv2.getRotationMatrix2D(); 圖像轉(zhuǎn)置 cv2.transpose(); 圖像鏡像 cv2.flip(); 圖像重映射 cv2.remap()。
12. 圖像濾波
理解什么是濾波,高頻與低頻濾波,圖像濾波函數(shù)。
線性濾波:方框濾波、均值濾波、高斯濾波, 非線性濾波:中值濾波、雙邊濾波,
方框濾波 cv2.boxFilter(); 均值濾波 cv2.blur(); 高斯濾波 cv2.GaussianBlur(); 中值濾波 cv2.medianBlur(); 雙邊濾波 cv2.bilateralFilter()。
13. 圖像固定閾值與自適應(yīng)閾值
圖像閾值化是圖像處理的重要基礎(chǔ)部分,應(yīng)用很廣泛,可以根據(jù)灰度差異來分割圖像不同部分,閾值化處理的圖像一般為單通道圖像(灰度圖),核心要掌握的兩個函數(shù):
固定閾值:cv2.threshold(); 自適應(yīng)閾值:cv2.adaptiveThreshold()。
14. 圖像膨脹腐蝕
膨脹、腐蝕屬于形態(tài)學(xué)的操作,是圖像基于形狀的一系列圖像處理操作。膨脹腐蝕是基于高亮部分(白色)操作的,膨脹是対高亮部分進(jìn)行膨脹,類似“領(lǐng)域擴(kuò)張”, 腐蝕是高亮部分被腐蝕,類似“領(lǐng)域被蠶食”。
膨脹腐蝕的應(yīng)用和功能:
消除噪聲; 分割獨立元素或連接相鄰元素; 尋找圖像中的明顯極大值、極小值區(qū)域; 求圖像的梯度;
核心需要掌握的函數(shù)如下:
膨脹 cv2.dilate(); 腐蝕 cv2.erode()。
形態(tài)學(xué)其他操作,開運算、閉運算、頂帽、黑帽、形態(tài)學(xué)梯度 這些都是基于膨脹腐蝕基礎(chǔ)之上,利用 cv2.morphologyEx() 函數(shù)進(jìn)行操作。
15. 邊緣檢測
邊緣檢測可以提取圖像重要輪廓信息,減少圖像內(nèi)容,可用于分割圖像、特征提取等操作。
邊緣檢測的一般步驟:
濾波:濾出噪聲対檢測邊緣的影響 ; 增強(qiáng):可以將像素鄰域強(qiáng)度變化凸顯出來---梯度算子 ; 檢測:閾值方法確定邊緣 ;
常用邊緣檢測算子:
Canny 算子,Canny 邊緣檢測函數(shù) cv2.Canny(); Sobel 算子,Sobel 邊緣檢測函數(shù) cv2.Sobel(); Scharr 算子,Scharr 邊緣檢測函數(shù) cv2.Scahrr() ; Laplacian 算子,Laplacian 邊緣檢測函數(shù) cv2.Laplacian()。
16. 霍夫變換
霍夫變換(Hough Transform)是圖像處理中的一種特征提取技術(shù),該過程在一個參數(shù)空間中,通過計算累計結(jié)果的局部最大值,得到一個符合該特定形狀的集合,作為霍夫變換的結(jié)果。
本部分要學(xué)習(xí)的函數(shù):
標(biāo)準(zhǔn)霍夫變換、多尺度霍夫變換 cv2.HoughLines() ; 累計概率霍夫變換 cv2.HoughLinesP() ; 霍夫圓變換 cv2.HoughCricles() 。
17. 圖像直方圖計算及繪制
先掌握直方圖相關(guān)概念,在掌握核心函數(shù),最后通過 matplotlib 模塊對直方圖進(jìn)行繪制。計算直方圖用到的函數(shù)是 cv2.calcHist()。
直方圖相關(guān)應(yīng)用:
直方圖均衡化 cv2.equalizeHist(); 直方圖對比 cv2.compareHist(); 反向投影 cv2.calcBackProject()。
18. 模板匹配
模板匹配是在一幅圖像中尋找與另一幅模板圖像最匹配(相似)部分的技術(shù)。
核心用到的函數(shù)如下:
模板匹配 cv2.matchTemplate(); 矩陣歸一化 cv2.normalize(); 尋找最值 cv2.minMaxLoc()。
19. 輪廓查找與繪制
核心要理解到在 OpenCV 中,查找輪廓就像在黑色背景中找白色物體。
常用函數(shù):
查找輪廓 cv2.findContours(); 繪制輪廓 cv2.drawContours() 。
最后應(yīng)該掌握針對每個輪廓進(jìn)行操作。
20. 輪廓特征屬性及應(yīng)用
這部分內(nèi)容比較重要,并且知識點比較多,核心內(nèi)容與函數(shù)分別如下:
尋找凸包 cv2.convexHull() 與 凸性檢測 cv2.isContourConvex(); 輪廓外接矩形 cv2.boundingRect(); 輪廓最小外接矩形 cv2.minAreaRect(); 輪廓最小外接圓 cv2.minEnclosingCircle(); 輪廓橢圓擬合 cv2.fitEllipse(); 逼近多邊形曲線 cv2.approxPolyDP(); 計算輪廓面積 cv2.contourArea(); 計算輪廓長度 cv2.arcLength(); 計算點與輪廓的距離及位置關(guān)系 cv2.pointPolygonTest(); 形狀匹配 cv2.matchShapes()。
21. 高級部分-分水嶺算法及圖像修補(bǔ)
掌握分水嶺算法的原理,掌握核心函數(shù) cv2.watershed() 。
可以擴(kuò)展補(bǔ)充圖像修補(bǔ)技術(shù)及相關(guān)函數(shù) cv2.inpaint(),學(xué)習(xí)完畢可以嘗試人像祛斑應(yīng)用。
22. GrabCut & FloodFill 圖像分割、角點檢測
這部分內(nèi)容都需要一些圖像專業(yè)背景知識,先掌握相關(guān)概念知識,在重點學(xué)習(xí)相關(guān)函數(shù)。
GrabCut 算法 cv2.grabCut(); 漫水填充算法 cv2.floodFill(); Harris 角點檢測 cv2.cornerHarris(); Shi-Tomasi 角點檢測 cv2.goodFeaturesToTrack(); 亞像素角點檢測 cv2.cornerSubPix()。
23. 特征檢測與匹配
特征點的檢測和匹配是計算機(jī)視覺中非常重要的技術(shù)之一, 在物體識別、視覺跟蹤、三維重建等領(lǐng)域都有很廣泛的應(yīng)用。
OpenCV 提供了如下特征檢測方法:
“FAST” FastFeatureDetector; “STAR” StarFeatureDetector; “SIFT” SIFT(nonfree module) Opencv3 移除,需調(diào)用 xfeature2d 庫; “SURF” SURF(nonfree module) Opencv3 移除,需調(diào)用 xfeature2d 庫; “ORB” ORB Opencv3 移除,需調(diào)用 xfeature2d 庫; “MSER” MSER; “GFTT” GoodFeaturesToTrackDetector; “HARRIS” (配合 Harris detector); “Dense” DenseFeatureDetector; “SimpleBlob” SimpleBlobDetector。
24. OpenCV 應(yīng)用部分之運動物體跟蹤與人臉識別
了解何為運動物體檢測,OpenCV 中常用的運動物體檢測方法有背景減法、幀差法、光流法,跟蹤算法常用的有 meanShift, camShift,粒子濾波, 光流法 等。
meanShift 跟蹤算法 cv2.meanShift(); CamShift 跟蹤算法 cv2.CamShift()。
如果學(xué)習(xí)人臉識別,涉及的知識點為:
人臉檢測:從圖像中找出人臉位置并標(biāo)識; 人臉識別:從定位到的人臉區(qū)域區(qū)分出人的姓名或其它信息; 機(jī)器學(xué)習(xí)。

近期熱門文章推薦:

