橡皮擦,一個逗趣的互聯網高級網蟲,
觀前提醒,本篇文章涉及知識點巨大,建議先收藏,再慢慢學習,
本篇文章目的將為你詳細羅列 Python OpenCV 的學習路線與重要知識點,核心分成 24 個小節點,全部掌握,OpenCV 入門階段就順利通過了,
這是一篇學習量很大的文章
- 1. OpenCV 初識與安裝
- 2. OpenCV 模塊簡介
- 3. OpenCV 影像讀取,顯示,保存
- 4. 攝像頭和視頻讀取,保存
- 5. OpenCV 常用資料結構和顏色空間
- 6. OpenCV 常用繪圖函式
- 7. OpenCV 界面事件操作之滑鼠與滑動條
- 8. 影像像素、通道分離與合并
- 9. 影像邏輯運算
- 10. 影像 ROI 與 mask 掩膜
- 11. 影像幾何變換
- 12. 影像濾波
- 13. 影像固定閾值與自適應閾值
- 14. 影像膨脹腐蝕
- 15. 邊緣檢測
- 16. 霍夫變換
- 17. 影像直方圖計算及繪制
- 18. 模板匹配
- 19. 輪廓查找與繪制
- 20. 輪廓特征屬性及應用
- 21. 高級部分-分水嶺演算法及影像修補
- 22. GrabCut & FloodFill 影像分割、角點檢測
- 23. 特征檢測與匹配
- 24. OpenCV 應用部分之運動物體跟蹤與人臉識別
1. OpenCV 初識與安裝
本部分要了解 OpenCV (Open Source Computer Vision Library)的相關簡介,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. 霍夫變換
霍夫變換(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, camShift,粒子濾波, 光流法 等,
- meanShift 跟蹤演算法 cv2.meanShift();
- CamShift 跟蹤演算法 cv2.CamShift(),
如果學習人臉識別,涉及的知識點為:
- 人臉檢測:從影像中找出人臉位置并標識;
- 人臉識別:從定位到的人臉區域區分出人的姓名或其它資訊;
- 機器學習,
相關閱讀
- Python 爬蟲 100 例教程,超棒的爬蟲教程,立即訂閱吧
- Python 游戲世界(更新中,目標文章數 50+,現在訂閱,都是老粉)
- Python 爬蟲小課,精彩 9 講
今天是持續寫作的第 125 / 200 天,
如果你想跟博主建立親密關系,可以關注同名公眾號 夢想橡皮擦,近距離接觸一個逗趣的互聯網高級網蟲,
博主 ID:夢想橡皮擦,希望大家點贊、評論、收藏,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/272484.html
標籤:其他
下一篇:Java運算子
