愛伊米

OpenCV 影象處理入門:模組,濾波,閾值,模板匹配,邊緣檢測…

OpenCV 影象處理入門:模組,濾波,閾值,模板匹配,邊緣檢測…

OpenCV

影象處理入門:模組,濾波,閾值,模板匹配,邊緣檢測

Edited by 4thInstitute

本文分享自華為雲社群《難以置信!一篇文章就梳理清楚了Python OpenCV的知識體系》,原文作者:夢想橡皮擦

@https://bbs。huaweicloud。com/blogs/301327

本篇文章目的將詳細羅列Python OpenCV的學習路線與重要知識點。將OpenCV入門階段核心分成24個小節點:

01

OpenCV

初識與安裝

OpenCV 影象處理入門:模組,濾波,閾值,模板匹配,邊緣檢測…

本部分要了解

OpenCV

Open Source Computer Vision Library

的相關簡介,OpenCv可以執行在多平臺之上,

輕量級而且高效,由一系列

C

函式和少量

C++

類構成,提供了

Python

Ruby

MATLAB

等語言的介面

,所以在學習的時候,要注意查閱資料的語言實現相關問題。

這個階段除了安裝OpenCV相關庫以外,建議收藏官方網址,官方手冊,官方入門教程,這些都是最佳的學習資料。

模組安裝完畢,需要重點測試OpenCV是否安裝成功,可透過Python查詢安裝版本。

02

OpenCV

模組簡介

先從全域性上掌握OpenCV都由哪些模組組成。例如下面這些模組,你需要找到下述模組的應用場景與簡介。

core、imgproc、highgui、calib3d、features2d、contrib、flann、gpu、legacy、ml、objdetect、photo、stitching。

整理每個模組的核心功能,並完成第一個OpenCV案例,讀取顯示圖片。

03

OpenCV

影象讀取,顯示,儲存

安裝OpenCV之後,從影象獲取開始進行學習,包含本地載入圖片,相機獲取圖片,影片獲取,建立影象等內容。

只有先獲取影象之後,才能對影象進行操作處理,資訊提取,結果輸出,影象顯示,影象儲存。

對於一個影象而言,在OpenCV中進行讀取展示的步驟如下,你可以將其程式碼進行對應。

1。影象讀取;

2。視窗建立;

3。影象顯示;

4。影象儲存;

5。資源釋放。

涉及需要學習的函式有、、、、、、 、、、。

04

攝像頭和影片讀取,儲存

第一個要重點學習VideoCapture類,該類常用的方法有:

· open()函式;

· isOpened()函式;

· release()函式;

· grab()函式;

·retrieve()函式;

· get()函式;

·set()函式;

除了讀取影片外,還需要掌握Opencv提供的VideoWriter類,用於儲存影片檔案。

學習完相關知識之後,可以進行這樣一個實驗,將一個影片逐幀儲存為圖片。

05

OpenCV

常用資料結構和顏色空間

這部分要掌握的類有  類、 類、 類、 類,除此之外,在Python中用  對影象進行操作,所以  相關的知識點,建議提前學習,效果更佳。

06

OpenCV

常用繪圖函式

掌握如下函式的用法,即可熟練的在Opencv中繪製圖形。

·cv2。line();

·cv2。circle();

·cv2。rectangle();

·cv2。ellipse();

·cv2。fillPoly();

· cv2。polylines();

·cv2。putText()。

07

OpenCV

介面事件操作之滑鼠與滑動條

第一個要掌握的函式是滑鼠操作訊息回撥函式, ,滑動條涉及兩個函式,分別是: 和 。

掌握上述內容之後,可以實現兩個案例,其一為滑鼠在一張圖片上拖動框選區域進行截圖,其二是透過滑動條讓影片倍速播放。

08

影象畫素、通道分離與合併

瞭解影象畫素矩陣,熟悉圖片的畫素構成,可以訪問指定畫素的畫素值,並對其進行修改。

通道分離函式cv2。split(),通道合併函式cv2。merge()。

09

影象邏輯運算

掌握影象之間的計算,涉及函式如下:

·cv2。add();

·cv2。addWeighted();

·cv2。subtract();

·cv2。absdiff();

· cv2。bitwise_and();

· cv2。bitwise_not();

· cv2。bitwise_xor()。

還可以研究影象乘除法。

10

影象

ROI

mask

掩膜

本部分屬於OpenCV中的重點知識,第一個為感興趣區域ROI,第二個是mask掩膜(掩碼)操作。

學習ROI部分時,還可以學習一下影象的深淺複製。

11

影象幾何變換

影象幾何變換依舊是對基礎函式的學習與理解,涉及內容如下:

· 影象縮放cv2。resize();

· 影象平移cv2。warpAffine();

·影象旋轉cv2。getRotationMatrix2D();

· 影象轉置cv2。transpose();

· 影象映象cv2。flip();

· 影象重對映cv2。remap()。

12

影象濾波

理解什麼是濾波,高頻與低頻濾波,影象濾波函式。

線性濾波:方框濾波、均值濾波、高斯濾波,非線性濾波:中值濾波、雙邊濾波,

· 方框濾波cv2。boxFilter();

· 均值濾波cv2。blur();

·高斯濾波cv2。GaussianBlur();

·中值濾波cv2。medianBlur();

·雙邊濾波cv2。bilateralFilter()。

13

影象固定閾值與自適應閾值

影象閾值化是影象處理的重要基礎部分,應用很廣泛,可以根據灰度差異來分割影象不同部分,閾值化處理的影象一般為單通道影象(灰度圖),核心要掌握的兩個函式:

·固定閾值:cv2。threshold();

·自適應閾值:cv2。adaptiveThreshold()。

14

影象膨脹腐蝕

膨脹、腐蝕屬於形態學的操作,是影象基於形狀的一系列影象處理操作。

膨脹腐蝕是基於高亮部分(白色)操作的,膨脹是対高亮部分進行膨脹,類似“領域擴張”,腐蝕是高亮部分被腐蝕,類似“領域被蠶食”。

膨脹腐蝕的應用和功能:

·消除噪聲;

·分割獨立元素或連線相鄰元素;

·尋找影象中的明顯極大值、極小值區域;

·求影象的梯度;

核心需要掌握的函式如下:

· 膨脹cv2。dilate();

·腐蝕cv2。erode()。

形態學其他操作,開運算、閉運算、頂帽、黑帽、形態學梯度 這些都是基於膨脹腐蝕基礎之上,利用  函式進行操作。

15

邊緣檢測

邊緣檢測可以提取影象重要輪廓資訊,減少影象內容,可用於分割影象、特徵提取等操作。

邊緣檢測的一般步驟:

· 濾波:濾出噪聲対檢測邊緣的影響;

·增強:可以將畫素鄰域強度變化凸顯出來—梯度運算元;

·檢測:閾值方法確定邊緣;

常用邊緣檢測運算元:

·Canny運算元,Canny邊緣檢測函式cv2。Canny();

·Sobel運算元,Sobel邊緣檢測函式cv2。Sobel();

·Scharr運算元,Scharr邊緣檢測函式cv2。Scahrr();

·Laplacian運算元,Laplacian邊緣檢測函式cv2。Laplacian()。

16

霍夫變換

霍夫變換(Hough Transform)是影象處理中的一種特徵提取技術,該過程在一個引數空間中,透過計算累計結果的區域性最大值,得到一個符合該特定形狀的集合,作為霍夫變換的結果。

本部分要學習的函式:

· 標準霍夫變換、多尺度霍夫變換cv2。HoughLines();

·累計機率霍夫變換cv2。HoughLinesP();

·霍夫圓變換cv2。HoughCricles()。

17

影象直方圖計算及繪製

先掌握直方圖相關概念,在掌握核心函式,最後透過matplotlib模組對直方圖進行繪製。計算直方圖用到的函式是cv2。calcHist()。

直方圖相關應用:

· 直方圖均衡化cv2。equalizeHist();

·直方圖對比cv2。compareHist();

·反向投影cv2。calcBackProject()。

18

模板匹配

模板匹配是在一幅影象中尋找與另一幅模板影象最匹配(相似)部分的技術。

核心用到的函式如下:

· 模板匹配cv2。matchTemplate();

· 矩陣歸一化cv2。normalize();

·  尋找最值cv2。minMaxLoc()。

19

輪廓查詢與繪製

核心要理解到在OpenCV中,查詢輪廓就像在黑色背景中找白色物體。

常用函式:

· 查詢輪廓cv2。findContours();

· 繪製輪廓cv2。drawContours()。

最後應該掌握針對每個輪廓進行操作。

20

輪廓特徵屬性及應用

這部分內容比較重要,並且知識點比較多,核心內容與函式分別如下:

·尋找凸包cv2。convexHull()與凸性檢測cv2。isContourConvex();

·輪廓外接矩形cv2。boundingRect();

· 輪廓最小外接矩形cv2。minAreaRect();

·輪廓最小外接圓cv2。minEnclosingCircle();

· 輪廓橢圓擬合cv2。fitEllipse();

· 逼近多邊形曲線cv2。approxPolyDP();

·  計算輪廓面積cv2。contourArea();

·  計算輪廓長度cv2。arcLength();

·     計算點與輪廓的距離及位置關係cv2。pointPolygonTest();

·     形狀匹配cv2。matchShapes()。

21

高階部分

-

分水嶺演算法及影象修補

掌握分水嶺演算法的原理,掌握核心函式cv2。watershed()。

可以擴充套件補充影象修補技術及相關函式cv2。inpaint(),學習完畢可以嘗試人像祛斑應用。

22

GrabCut &FloodFill

影象分割、角點檢測

這部分內容都需要一些影象專業背景知識,先掌握相關概念知識,在重點學習相關函式。

·     GrabCut演算法cv2。grabCut();

·     漫水填充演算法cv2。floodFill();

·     Harris角點檢測cv2。cornerHarris();

·     Shi-Tomasi角點檢測cv2。goodFeaturesToTrack();

·     亞畫素角點檢測cv2。cornerSubPix()。

23

特徵檢測與匹配

特徵點的檢測和匹配是計算機視覺中非常重要的技術之一,在物體識別、視覺跟蹤、三維重建等領域都有很廣泛的應用。

OpenCV提供瞭如下特徵檢測方法:

·     “FAST”FastFeatureDetector;

·     “STAR”StarFeatureDetector;

·     “SIFT”SIFT(nonfree module) Opencv3移除,需呼叫xfeature2d庫;

·     “SURF”SURF(nonfree module) Opencv3移除,需呼叫xfeature2d庫;

·     “ORB”ORB Opencv3移除,需呼叫xfeature2d庫;

·     “MSER”MSER;

·     “GFTT”GoodFeaturesToTrackDetector;

·     “HARRIS”(配合Harris detector);

·     “Dense”DenseFeatureDetector;

·     “SimpleBlob”SimpleBlobDetector。

24

OpenCV

應用部分之運動物體跟蹤與人臉識別

瞭解何為運動物體檢測,OpenCV中常用的運動物體檢測方法有背景減法、幀差法、光流法,跟蹤演算法常用的有, ,, 等。

·     meanShift跟蹤演算法cv2。meanShift();

·     CamShift跟蹤演算法cv2。CamShift()。

如果學習人臉識別,涉及的知識點為:

·     人臉檢測:從影象中找出人臉位置並標識;

·     人臉識別:從定位到的人臉區域區分出人的姓名或其它資訊;

·     機器學習。