<input id="0qass"><u id="0qass"></u></input>
  • <input id="0qass"><u id="0qass"></u></input>
  • <menu id="0qass"><u id="0qass"></u></menu>

    難以置信!一篇文章就梳理清楚了 Python OpenCV 的知識體系

    橡皮擦,一個逗趣的互聯網高級網蟲。

    觀前提醒,本篇文章涉及知識點巨大,建議先收藏,再慢慢學習。

    本篇文章目的將為你詳細羅列 Python OpenCV 的學習路線與重要知識點。核心分成 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 中進行讀取展示的步驟如下,你可以將其代碼進行對應。

    1. 圖像讀取;
    2. 窗口創建;
    3. 圖像顯示;
    4. 圖像保存;
    5. 資源釋放。

    涉及需要學習的函數有 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 中常用的運動物體檢測方法有背景減法、幀差法、光流法,跟蹤算法常用的有 meanShiftcamShift粒子濾波光流法 等。

    • meanShift 跟蹤算法 cv2.meanShift();
    • CamShift 跟蹤算法 cv2.CamShift()。

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

    • 人臉檢測:從圖像中找出人臉位置并標識;
    • 人臉識別:從定位到的人臉區域區分出人的姓名或其它信息;
    • 機器學習。

    相關閱讀

    1. Python 爬蟲 100 例教程,超棒的爬蟲教程,立即訂閱吧
    2. Python 游戲世界(更新中,目標文章數 50+,現在訂閱,都是老粉)
    3. Python 爬蟲小課,精彩 9 講

    今天是持續寫作的第 125 / 200 天。
    如果你想跟博主建立親密關系,可以關注同名公眾號 夢想橡皮擦,近距離接觸一個逗趣的互聯網高級網蟲。
    博主 ID:夢想橡皮擦,希望大家點贊、評論、收藏。

    夢想橡皮擦 CSDN認證博客專家 高級產品經理 業余編程愛好者 高級網蟲
    Python 爬蟲 100 例作者,藍橋簽約作者,滾雪球學 Python 專欄作者,技術博客日更實踐者,10 年互聯網從業經驗。 微信公眾號同名【夢想橡皮擦】。
    相關推薦
    <p> <span style="color:#424242;font-size:14px;background-color:#FFFFFF;">基于</span><span style="color:#424242;">OpenCV</span><span style="color:#424242;font-size:14px;background-color:#FFFFFF;">最新版本</span><span style="color:#424242;">OpenCV4</span><span style="color:#424242;font-size:14px;background-color:#FFFFFF;">開始,從基礎開始,詳解</span><span style="color:#424242;">OpenCV</span><span style="color:#424242;font-size:14px;background-color:#FFFFFF;">核心模塊</span><span style="color:#424242;">Core</span><span style="color:#424242;font-size:14px;background-color:#FFFFFF;">、</span><span style="color:#424242;">Imgproc</span><span style="color:#424242;font-size:14px;background-color:#FFFFFF;">、</span><span style="color:#424242;">video analysis</span><span style="color:#424242;font-size:14px;background-color:#FFFFFF;">核心</span><span style="color:#424242;">API</span><span style="color:#424242;font-size:14px;background-color:#FFFFFF;">與相關知識點,講解從圖像組成,像素操作開始,一步一步教你如何寫代碼,如何用</span><span style="color:#424242;">API</span><span style="color:#424242;font-size:14px;background-color:#FFFFFF;">解決實際問題,從圖像處理到視頻分析,涵蓋計算機視覺與</span><span style="color:#424242;">OpenCV4</span><span style="color:#424242;font-size:14px;background-color:#FFFFFF;">中主要模塊相關知識點,穿插大量工程編程技巧與知識點與案例,全部課程</span><span style="color:#424242;">PPT</span><span style="color:#424242;font-size:14px;background-color:#FFFFFF;">課件與源碼均可以下載。部分課程內容運行截圖:</span> </p> <p> <span style="color:#424242;font-size:14px;background-color:#FFFFFF;"><img src="https://img-bss.csdn.net/201905270151327319.png" alt="" /><br /></span> </p> <p> <span style="color:#424242;font-size:14px;background-color:#FFFFFF;"><img src="https://img-bss.csdn.net/201905270151199926.png" alt="" /><br /></span> </p> <p> <span style="color:#424242;font-size:14px;background-color:#FFFFFF;"><img src="https://img-bss.csdn.net/201905270143028023.png" alt="" /><br /></span> </p> <p> <span style="color:#424242;font-size:14px;background-color:#FFFFFF;"><img src="https://img-bss.csdn.net/201905270143153426.png" alt="" /><br /></span> </p> <p> <span style="color:#424242;font-size:14px;background-color:#FFFFFF;"><img src="https://img-bss.csdn.net/201905270143373800.png" alt="" /><br /></span> </p> <p> <span style="color:#424242;font-size:14px;background-color:#FFFFFF;"><img src="https://img-bss.csdn.net/201905270143508281.png" alt="" /><br /></span> </p> <p> <span style="color:#424242;font-size:14px;background-color:#FFFFFF;"><img src="https://img-bss.csdn.net/201905270147189339.png" alt="" /><br /></span> </p> <p> <span style="color:#424242;font-size:14px;background-color:#FFFFFF;"><img src="https://img-bss.csdn.net/201905270147595785.png" alt="" /><br /></span> </p>
    ??2020 CSDN 皮膚主題: 博客之星2020 設計師:CY__ 返回首頁
    實付 9.90元
    使用余額支付
    點擊重新獲取
    掃碼支付
    錢包余額 0

    抵扣說明:

    1.余額是錢包充值的虛擬貨幣,按照1:1的比例進行支付金額的抵扣。
    2.余額無法直接購買下載,可以購買VIP、C幣套餐、付費專欄及課程。

    余額充值
    多乐彩