1.OpenCV初識與安裝
本部分要了解OpenCV(OpenSourceComputerVisionLibrary)的相關簡介,OpenCv可以運行在多平臺之上,輕量級而且高效,由一系列C函數和少量C++類構成,提供了Python、Ruby、MATLAB等語言的接口,所以在學習的時候,要注意查閱資料的語言實現相關問題。
這個階段除了安裝OpenCV相關庫以外,建議收藏官方網址,官方手冊,官方入門教程,這些都是最佳的學習資料。
模塊安裝完畢,需要重點測試OpenCV是否安裝成功,可通過Python查詢安裝版本。
2.OpenCV模塊簡介
先從全局上掌握OpenCV都由哪些模塊組成。例如下面這些模塊,你需要找到下述模塊的應用場景與簡介。
core、imgproc、highgui、calib3d、features2d、contrib、flann、gpu、legacy、ml、objdetect、photo、stitching。
整理每個模塊的核心功能,并完成第一個OpenCV案例,讀取顯示圖片。
3.OpenCV圖像讀取,顯示,保存
安裝OpenCV之后,從圖像獲取開始進行學習,包含本地加載圖片,相機獲取圖片,視頻獲取,創建圖像等內容。
只有先獲取圖像之后,才能對圖像進行操作處理,信息提取,結果輸出,圖像顯示,圖像保存。
對于一個圖像而言,在OpenCV中進行讀取展示的步驟如下,你可以將其代碼進行對應。
圖像讀取;
窗口創建;
圖像顯示;
圖像保存;
資源釋放。
涉及需要學習的函數有cv2.imread()、cv2.namedWindow()、cv2.imshow()、cv2.imwrite()、cv2.destroyWindow()、cv2.destroyAllWindows()、cv2.imshow()、cv2.cvtColor()、cv2.imwrite()、cv2.waitKey()。
4.攝像頭和視頻讀取,保存
第一個要重點學習VideoCapture類,該類常用的方法有:
open()函數;
isOpened()函數;
release()函數;
grab()函數;
retrieve()函數;
get()函數;
set()函數;
除了讀取視頻外,還需要掌握Opencv提供的VideoWriter類,用于保存視頻文件。
學習完相關知識之后,可以進行這樣一個實驗,將一個視頻逐幀保存為圖片。
5.OpenCV常用數據結構和顏色空間
這部分要掌握的類有Point類、Rect類、Size類、Scalar類,除此之外,在Python中用numpy對圖像進行操作,所以numpy相關的知識點,建議提前學習,效果更佳。
OpenCV中常用的顏色空間有BGR顏色空間、HSV/HLS顏色空間、Lab顏色空間,這些都需要了解,優先掌握BGR顏色空間。
6.OpenCV常用繪圖函數
掌握如下函數的用法,即可熟練的在Opencv中繪制圖形。
cv2.line();
cv2.circle();
cv2.rectangle();
cv2.ellipse();
cv2.fillPoly();
cv2.polylines();
cv2.putText()。
7.OpenCV界面事件操作之鼠標與滑動條
第一個要掌握的函數是鼠標操作消息回調函數,cv2.setMouseCallback(),滑動條涉及兩個函數,分別是:cv2.createTrackbar()和cv2.getTrackbarPos()。
掌握上述內容之后,可以實現兩個案例,其一為鼠標在一張圖片上拖動框選區域進行截圖,其二是通過滑動條讓視頻倍速播放。
8.圖像像素、通道分離與合并
了解圖像像素矩陣,熟悉圖片的像素構成,可以訪問指定像素的像素值,并對其進行修改。
通道分離函數cv2.split(),通道合并函數cv2.merge()。
9.圖像邏輯運算
掌握圖像之間的計算,涉及函數如下:
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()。
形態學其他操作,開運算、閉運算、頂帽、黑帽、形態學梯度這些都是基于膨脹腐蝕基礎之上,利用cv2.morphologyEx()函數進行操作。
15.邊緣檢測
邊緣檢測可以提取圖像重要輪廓信息,減少圖像內容,可用于分割圖像、特征提取等操作。
邊緣檢測的一般步驟:
濾波:濾出噪聲対檢測邊緣的影響;
增強:可以將像素鄰域強度變化凸顯出來—梯度算子;
檢測:閾值方法確定邊緣;
常用邊緣檢測算子:
Canny算子,Canny邊緣檢測函數cv2.Canny();
Sobel算子,Sobel邊緣檢測函數cv2.Sobel();
Scharr算子,Scharr邊緣檢測函數cv2.Scahrr();
Laplacian算子,Laplacian邊緣檢測函數cv2.Laplacian()。
16.霍夫變換
霍夫變換(HoughTransform)是圖像處理中的一種特征提取技術,該過程在一個參數空間中,通過計算累計結果的局部最大值,得到一個符合該特定形狀的集合,作為霍夫變換的結果。
本部分要學習的函數:
標準霍夫變換、多尺度霍夫變換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(nonfreemodule)Opencv3移除,需調用xfeature2d庫;
“SURF”SURF(nonfreemodule)Opencv3移除,需調用xfeature2d庫;
“ORB”ORBOpencv3移除,需調用xfeature2d庫;
“MSER”MSER;
“GFTT”GoodFeaturesToTrackDetector;
“HARRIS”(配合Harrisdetector);
“Dense”DenseFeatureDetector;
“SimpleBlob”SimpleBlobDetector。
24.OpenCV應用部分之運動物體跟蹤與人臉識別
了解何為運動物體檢測,OpenCV中常用的運動物體檢測方法有背景減法、幀差法、光流法,跟蹤算法常用的有meanShift,camShift,粒子濾波,光流法等。
meanShift跟蹤算法cv2.meanShift();
CamShift跟蹤算法cv2.CamShift()。
如果學習人臉識別,涉及的知識點為:
人臉檢測:從圖像中找出人臉位置并標識;
人臉識別:從定位到的人臉區域區分出人的姓名或其它信息;
機器學習。
以上內容為大家介紹了PythonOpenCV的知識體系,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。http://www.dietsnews.net/