cv2.getStructuringElement()函數(shù)及開、閉、腐蝕、膨脹原理講解
cv2.getStructuringElement()函數(shù)的作用是返回一個(gè)結(jié)構(gòu)元素(卷積核),具體解析如下:
kernel = cv2.getStructuringElement(a,b,c): # 得到一個(gè)結(jié)構(gòu)元素(卷積核)。主要用于后續(xù)的腐蝕、膨脹、開、閉等運(yùn)算。
因?yàn)檫@些運(yùn)算都是依賴于卷積核的,不同的卷積核(形狀、大小)對(duì)圖形的腐蝕、膨脹操作效果不一樣輸入?yún)?shù):
a設(shè)定卷積核的形狀、b設(shè)定卷積核的大小、c表示描點(diǎn)的位置,一般 c = 1,表示描點(diǎn)位于中心。(下文細(xì)說)
返回值:
返回指定形狀和尺寸的結(jié)構(gòu)元素(一般是返回一個(gè)矩形)、也就是腐蝕/膨脹用的核的大小。(下文細(xì)說)
a取不同的參數(shù)會(huì)導(dǎo)致卷積核有不同的形狀,a參數(shù)有三個(gè):
①:MORPH_RECT(函數(shù)返回矩形卷積核)
②:MORPH_CROSS(函數(shù)返回十字形卷積核)
③:MORPH_ELLIPSE(函數(shù)返回橢圓形卷積核)
b:用一個(gè)(x,y)的形式表示,表示卷積核有x行,y列。
腐蝕操作
①:腐蝕操作的對(duì)象是二值化圖像,二值圖像前景物體為1,背景為0,卷積核也是只含有0和1。
②:比如這是圖像A和一個(gè)卷積核(結(jié)構(gòu)元素):

(注意A的像素點(diǎn)(方格)不是0就是1。B的描點(diǎn)(中心點(diǎn))就是我們通過getStructuringElement函數(shù)中的參數(shù)c來確定的,也可以設(shè)立在其他地方)
腐蝕的步驟就是用卷積核B的描點(diǎn)(此處就是中心點(diǎn)),來對(duì)齊A中的每一個(gè)小方格,然后選取卷積核B的方格中的數(shù)據(jù)的最小值,意思就是當(dāng)B的描點(diǎn)對(duì)齊A的邊界方格的時(shí)候,那么B的其他四個(gè)方格可能位于A圖像中的0像素點(diǎn),那么最小值就是0,那么就把卷積核B的描點(diǎn)對(duì)應(yīng)的A中的小方格設(shè)為0,這就導(dǎo)致使用腐蝕操作后,我我們能看到的白色區(qū)域減少的原因。
kernel = cv2.getStructuringElement(a,b,c) cv2.erode(img, kernel, iteration = 1)# 腐蝕操作
膨脹操作
原理與腐蝕操作一樣,只不過是取最大像素值,其他地方?jīng)]差別。
kernel = cv2.getStructuringElement(a,b,c) cv2.dilate(img, kernel, iteration = 1)# 膨脹操作
開、閉
開:先進(jìn)行腐蝕運(yùn)算,再進(jìn)行膨脹運(yùn)算。
閉:先進(jìn)行膨脹運(yùn)算,再進(jìn)行腐蝕運(yùn)算。
kernel = cv2.getStructuringElement(a,b,c) opening = cv2.morphologyEx(img, cv2.MORPH_OPEN,kernel) # 開運(yùn)算 opening = cv2.morphologyEx(ima,cv2.MORPH_CLOSE,lernel) # 閉運(yùn)算
開運(yùn)算和閉運(yùn)算都是處理噪點(diǎn)用的:
開:消去一個(gè)黑圖中的很多小白點(diǎn)
閉:小區(qū)一個(gè)白圖中的很多小黑點(diǎn) 如:
原圖:

開運(yùn)算:

閉運(yùn)算:

總結(jié)
到此這篇關(guān)于cv2.getStructuringElement()函數(shù)及開、閉、腐蝕、膨脹原理講解的文章就介紹到這了,更多相關(guān)cv2.getStructuringElement()函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Python的while循環(huán)中使用else以及循環(huán)嵌套的用法
這篇文章主要介紹了在Python的while循環(huán)中使用else以及循環(huán)嵌套的用法,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10
Python讀取CSV文件并進(jìn)行數(shù)據(jù)可視化
這篇文章主要為大家詳細(xì)介紹了Python如何讀取CSV文件并進(jìn)行數(shù)據(jù)可視化,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12
Python collections中的雙向隊(duì)列deque簡單介紹詳解
這篇文章主要介紹了Python collections中的雙向隊(duì)列deque簡單介紹詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
探索Python fcntl模塊文件鎖和文件控制的強(qiáng)大工具使用實(shí)例
這篇文章主要介紹了Python fcntl模塊文件鎖和文件控制的強(qiáng)大工具使用實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Python實(shí)現(xiàn)將數(shù)據(jù)庫一鍵導(dǎo)出為Excel表格的實(shí)例
下面小編就為大家?guī)硪黄狿ython實(shí)現(xiàn)將數(shù)據(jù)庫一鍵導(dǎo)出為Excel表格的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12

