OpenCV Python形態學變換

2021-09-13 10:12:45 字數 2913 閱讀 5839

原理形態變換是根據的形狀進行的簡單運算。一般被用在二值影象上。它需要兩個輸入,乙個是我們的原始,另乙個是被叫做結構元素或者是核,用來決定運算的型別。兩個基本的形態運算是腐蝕和dilation.其他的變形如開,合,梯度等也會有。我們來看看他們在下面這張圖上的表現。

1. 腐蝕

腐蝕的基本理念就和土壤腐蝕一樣,它會腐蝕掉前景的邊緣(所以前景應該用白色)。核腐蝕掉。原始裡的乙個畫素(1或者0)只有在核下的所有畫素都是1的時候才被認為是1.否則它就被腐蝕掉了(變成0)

根據核的大小來決定在邊界附近的多少畫素會被丟棄掉,所以前景物體的厚度或大小會縮小,或者說白色區域會減小。這個在移除小的白色噪點時很有用。

在下面的例子裡,我用給乙個5x5的核,來看看如何工作的:

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)

結果:

2.膨脹

這個就是腐蝕的反義詞,在核下只要有至少乙個畫素是1,畫素的值就是1.所以它會增加上白色區域的範圍或者前景物體的大小。一般來說,在去噪過程中,腐蝕後會再膨脹。因為腐蝕去掉了白噪點,但是它也縮小了我們的物件,所以我們再膨脹它,由於噪點已經沒了,它不會回來,我們的物體區域會增加。在把分隔物件連起來也很有用。

3. 開

開就是腐蝕之後再膨脹的另乙個名字。我們使用函式cv2.morphologyex()

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

結果:

4.閉閉是開的反義詞,膨脹之後再腐蝕,在用來關閉前景物件裡的小洞或小黑點很有用。

5.形態梯度

這個和腐蝕以及膨脹不同,結果看上去像是物體的輪廓。

gradient = cv2.morphologyex(img,cv2.morph_gradient,kernel)

結果:

6.頂帽

這個是輸入和的開運算結果的差別,下面是9x9的核的

tophat=cv2.morphologyex(img,cv2.morph_tophat,kernel)

結果:

7.黑帽

這是輸入的閉的結果和輸入的差別。

blackhat=cv2.morphologyex(img,cv2.morph_blackhat,kernel)

結果:

結構元素

我們通過numpy人工建立了結構元素。是個矩形,但是有些情況下,你可能會需要橢圓/圓型的核。為了這個目的,opencv有乙個函式cv2.getstructuringelement()。你把形狀和核的大小作為引數傳給它,你就可以得到想要的核。

# rectangular kernel

>>>cv2.getstructuringelement(cv2.morph_rect,(5,5))

array([[1,1,1,1,1],

[1,1,1,1,1],

[1,1,1,1,1],

[1,1,1,1,1],

[1,1,1,1,1]],dtype=uint8)

# elliptical kernel

>>>cv2.getstructuringelement(cv2.morph_ellipse,(5,5))

array([[0,0,1,0,0],

[1,1,1,1,1],

[1,1,1,1,1],

[1,1,1,1,1],

[0,0,1,0,0]],dtype=uint8)

# cross-shaped kernel

>>>cv2.getstructuringelement(cv2.morph_cross,(5,5))

array([[0,0,1,0,0],

[0,0,1,0,0],

[1,1,1,1,1],

[0,0,1,0,0],

[0,0,1,0,0]],dtype=uint8)

OpenCV Python 形態學操作

常用的形態學操作 腐蝕 膨脹 開運算和閉運算 形態學操作就是改變物體的形狀,比如腐蝕就是 變瘦 膨脹就是 變胖 形態學操作一般作用於二值化圖,來連線相鄰的元素或分離成獨立的元素。腐蝕和膨脹是針對中的白色部分!白色的畫素為255,黑色的畫素值為0 這樣原圖中邊緣的地方就會變成0 黑色 達到了 的效果。...

OpenCV Python 形態學轉換 十七

在這一章當中,我們將學習不同的形態學操作,例如侵蝕,膨脹,開運算,閉運算等。我們將看到不同的功能,例如 cv.erode cv.dilate cv.morphologyex 等。形態變換是一些基於影象形狀的簡單操作。通常在二進位制影象上執行。它需要兩個輸入,乙個是我們的原始影象,第二個是決定操作性質...

opencv python 7 形態學變換

形態學變換指將數學形態學作為工具從影象提取特徵或用於預處理或後處理的形態學過濾 細化和修剪等,主要針對二值影象。腐蝕即用乙個核掃過整張影象 類似2d卷積 若核中所有畫素均為1則置該畫素為1,否則為0,其結果就是邊界附近的白色畫素被抹去。cv2.erode 實現了該功能。膨脹與腐蝕相反,核中只要由乙個...