opencv python中的腐蝕與膨脹函式

2021-08-18 19:21:56 字數 1468 閱讀 6338

1、影象的腐蝕:

就像土壤侵蝕一樣,這個操作會把前景物體的邊界腐蝕掉(但是前景仍然是白色)。

這是怎麼做到的呢?卷積核沿著影象滑動,如果與卷積核對應的原影象的所有畫素值都是1,那麼中心元素就保持原來的畫素值,否則就變為零。  

這回產生什麼影響呢?根據卷積核的大小靠近前景的所有畫素都會被腐蝕掉(變為

0),所以前景物體會變小,整幅影象的白色區域會減少。

這對於去除白雜訊很有用,也可以用來斷開兩個連在一塊的物體等。  

這裡我們有乙個例子,使用乙個

5x5的卷積核,其中所有的值都是以。讓我們看看他是如何工作的:

[python]view plain

copy

import cv2  

import numpy as np   

img = cv2.imread('j.png',0)  

kernel = np.ones((5,5),np.uint8)    

erosion = cv2.erode(img,kernel,iterations = 1)  

腐蝕主要就是呼叫cv2.erode(img,kernel,iterations),這個函式的引數是

第乙個引數:img指需要腐蝕的圖

第二個引數:kernel指腐蝕操作的核心,預設是乙個簡單的3x3矩陣,我們也可以利用getstructuringelement()函式指明它的形狀

第三個引數:iterations指的是腐蝕次數,省略是預設為1

2、影象的膨脹

與腐蝕相反,與卷積核對應的原影象的畫素值中只要有乙個是1,中心元素的畫素值就是1。

所以這個操作會增加影象中的白色區域(前景)。一般在去雜訊時先用腐蝕再用膨脹。

因為腐蝕在去掉白雜訊的同時,也會使前景物件變小。所以我們再對他進行膨脹。這時雜訊已經被去除了,不會再回來了,但是前景還在並會增加。

膨脹也可以用來連線兩個分開的物體。

[python]view plain

copy

dilation = cv2.dilate(img,kernel,iterations = 1)  

3、影象的開運算

先進性腐蝕再進行膨脹就叫做開運算。就像我們上面介紹的那樣,它被用來去除雜訊。這裡我們用到的函式是cv2.morphologyex()。

[python]view plain

copy

opening = cv2.morphologyex(img, cv2.morph_open, kernel)  

4、影象的閉運算

先膨脹再腐蝕。它經常被用來填充前景物體中的小洞,或者前景物體上的小黑點。

[python]view plain

copy

closing = cv2.morphologyex(img, cv2.morph_close, kernel) 

腐女的生日

腐女要過生日了,pty 想給腐女送禮物,但是腐女所在的教室離pty 的教室太遠了,於是pty就拜託會動歸和a星的djy幫忙送禮物。djy在學校建立了乙個平面直角座標系,他站在了 0,0 點,腐女在 x0,y0 點,djy每次只能往上下左右四個方向移動一步,中間有n棟矩形教學樓,每個教學樓給出兩個對角...

5049 腐女的生日

給定 n 個平面座標系上的矩形,保證矩形不會相交且每個矩形周圍至少乙個單位不會有矩形,求從 0 0 走到 x0,y0 且不經過矩形內部的點的最短曼哈頓距離。data constraint n 105,x 0 0 首先注意到,除了一種情況以外,其他情況都存在一種最優解不需要往右走,那麼 x 方向的代價...

更換ROS中的OpenCV python版本

ros kinetic中預設安裝的是opencv 3.3.1 dev版本,而且ros的python環境預設只有2.7版本,通過pip安裝了別的版本的opencv後ros還是會最先呼叫預設的3.3.1,所以需要先解除安裝該版本 sudo easy install trash cli sudo tras...