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