OpenCV學(xué)習(xí)之圖像形態(tài)學(xué)處理詳解
本文是OpenCV圖像視覺入門之路的第11篇文章,本文詳細(xì)的在圖像形態(tài)學(xué)進(jìn)行了圖像處理,例如:腐蝕操作、膨脹操作、開閉運(yùn)算、梯度運(yùn)算、Top Hat Black Hat運(yùn)算等操作。
1.腐蝕操作
從下面代碼中可以看到有三幅腐蝕程度不同的圖,腐蝕越嚴(yán)重像素就越模糊
import cv2 import numpy as np from numpy import unicode if __name__ == '__main__': img1 = cv2.imread("D:/Jupyter_Notebooks/0.jpg") # 讀取彩色圖像(BGR) kernel = np.ones((3, 3), np.uint8) erosion = cv2.erode(img1, kernel) cv2.imshow("img1", erosion) # 顯示疊加圖像 dst img2 = cv2.imread("D:/Jupyter_Notebooks/0.jpg") # 讀取彩色圖像(BGR) kernel = np.ones((10, 10), np.uint8) erosion_1 = cv2.erode(img2, kernel) cv2.imshow('erosion_1', erosion_1) img3 = cv2.imread("D:/Jupyter_Notebooks/0.jpg") # 讀取彩色圖像(BGR) kernel = np.ones((30, 30), np.uint8) erosion_2 = cv2.erode(img3, kernel) cv2.imshow('erosion_2', erosion_2) cv2.waitKey(0) cv2.destroyAllWindows()
binary_img = np.array([ [0, 0, 0, 0, 0], [0,255,255,255,0], [0,255,255,255,0], [0,255,255,255,0], [0, 0, 0, 0, 0]],np.uint8) ones((3,3),np.uint8) [[ 0 0 0 0 0] [ 0 0 0 0 0] [ 0 0 255 0 0] [ 0 0 0 0 0] [ 0 0 0 0 0]]
通過(guò)上面的例子發(fā)現(xiàn),經(jīng)過(guò)3x3的kernel之后,最終只保留了中心的255像素,周邊的255都變成了0。在進(jìn)行腐蝕操作的時(shí)候,就是通過(guò)kernel大小的卷積在原圖像上滑動(dòng),只有當(dāng)kernel范圍內(nèi)的像素全為255時(shí)輸出才為255,否則輸出為0,所以kernel越大最終白色像素保留的會(huì)越少。
2.膨脹操作
圖像經(jīng)過(guò)膨脹之后,白色像素的范圍變大了。在做膨脹的時(shí)候,只要當(dāng)kernel范圍內(nèi)的像素有255時(shí)輸出就為255。
3.開閉運(yùn)算
開運(yùn)算其實(shí)就是先通過(guò)腐蝕操作后面再進(jìn)行膨脹,閉運(yùn)算和開運(yùn)算恰好相反先通過(guò)膨脹操作后面再進(jìn)行腐蝕。
import cv2 import numpy as np from numpy import unicode if __name__ == '__main__': img1 = cv2.imread("D:/Jupyter_Notebooks/0.jpg") # 讀取彩色圖像(BGR) # 定義kernel kernel = np.ones((3, 3), np.uint8) # 開運(yùn)算 open_img = cv2.morphologyEx(img1, cv2.MORPH_OPEN, kernel) # 閉運(yùn)算 close_img = cv2.morphologyEx(img1, cv2.MORPH_CLOSE, kernel) cv2.imshow("open_img", open_img) # 顯示疊加圖像 dst cv2.imshow("close_img", close_img) # 顯示疊加圖像 dst cv2.waitKey(0) cv2.destroyAllWindows()
4.梯度運(yùn)算
梯度運(yùn)算等價(jià)于膨脹運(yùn)算-腐蝕運(yùn)算 梯度運(yùn)算主要是用來(lái)保留圖像的輪廓
5.Top Hat Black Hat運(yùn)算
Top Hat運(yùn)算等價(jià)于原始圖像 - 開運(yùn)算,Black Hat運(yùn)算等價(jià)于閉運(yùn)算 - 原始圖像
形態(tài)學(xué)Top-Hat變換是指形態(tài)學(xué)頂帽操作與黑帽操作,前者是計(jì)算源圖像與開運(yùn)算結(jié)果圖之差,后者是計(jì)算閉運(yùn)算結(jié)果與源圖像之差。
形態(tài)學(xué)Top-Hat變換是常用的一種濾波手段,具有高通濾波的某部分特性,可實(shí)現(xiàn)在圖像中檢測(cè)出周圍背景亮結(jié)構(gòu)或周邊背景暗結(jié)構(gòu)。
頂帽操作常用于檢測(cè)圖像中的峰結(jié)構(gòu)。
黑帽操作常用于檢測(cè)圖像中的波谷結(jié)構(gòu)。
import cv2 import numpy as np from numpy import unicode if __name__ == '__main__': img1 = cv2.imread("D:/Jupyter_Notebooks/0.jpg") # 讀取彩色圖像(BGR) # 定義kernel kernel = np.ones((3, 3), np.uint8) tophat_img = cv2.morphologyEx(img1, cv2.MORPH_TOPHAT, kernel) blackhat_img = cv2.morphologyEx(img1, cv2.MORPH_BLACKHAT, kernel) cv2.imshow("tophat_img", tophat_img) # 顯示疊加圖像 dst cv2.imshow("blackhat_img", blackhat_img) # 顯示疊加圖像 dst cv2.waitKey(0) cv2.destroyAllWindows()
以上就是OpenCV學(xué)習(xí)之圖像形態(tài)學(xué)處理詳解的詳細(xì)內(nèi)容,更多關(guān)于OpenCV圖像形態(tài)學(xué)處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java Unsafe類實(shí)現(xiàn)原理及測(cè)試代碼
這篇文章主要介紹了Java Unsafe類實(shí)現(xiàn)原理及測(cè)試代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09深入了解python的tkinter實(shí)現(xiàn)簡(jiǎn)單登錄
這篇文章主要為大家介紹了python的tkinter實(shí)現(xiàn)簡(jiǎn)單登錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-12-12Python編程中非常重要卻又被嚴(yán)重低估的庫(kù)decorator
今天介紹的是一個(gè)已經(jīng)存在十年,但是依舊不紅的庫(kù) decorator,好像很少有人知道他的存在一樣。本篇文章不會(huì)過(guò)多的向你介紹裝飾器的基本知識(shí),我會(huì)默認(rèn)你知道什么是裝飾器,并且懂得如何寫一個(gè)簡(jiǎn)單的裝飾器2021-10-10使用Python和Pillow實(shí)現(xiàn)圖片馬賽克功能
在這篇博客中,我們將探討如何使用Python創(chuàng)建一個(gè)簡(jiǎn)單而有趣的桌面應(yīng)用程序,我們的目標(biāo)是構(gòu)建一個(gè)應(yīng)用,允許用戶選擇一張照片,然后在照片的右下角添加馬賽克效果,感興趣的小伙伴跟著小編一起來(lái)看看吧2024-08-08利用?Python?開發(fā)一個(gè)?Python?解釋器
這篇文章主要介紹了利用?Python?開發(fā)一個(gè)?Python?解釋器,在本文中,我們將設(shè)計(jì)一個(gè)可以執(zhí)行算術(shù)運(yùn)算的解釋器。下面我們大家一起來(lái)看看吧</P><P>2022-01-01Python FTP文件定時(shí)自動(dòng)下載實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Python FTP文件定時(shí)自動(dòng)下載實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11python實(shí)現(xiàn)輸入三角形邊長(zhǎng)自動(dòng)作圖求面積案例
這篇文章主要介紹了python實(shí)現(xiàn)輸入三角形邊長(zhǎng)自動(dòng)作圖求面積案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Python+Pytest實(shí)現(xiàn)壓力測(cè)試詳解
在現(xiàn)代Web應(yīng)用程序中,性能是至關(guān)重要的。為了確保應(yīng)用程序能夠在高負(fù)載下正常運(yùn)行,我們需要進(jìn)行性能測(cè)試。本文就來(lái)用Pytest進(jìn)行壓力測(cè)試,希望對(duì)大家有所幫助2023-03-03