opencv python 圖像形態學操做/圖像腐蝕/圖像膨脹/開運算/閉運算/頂帽/黑帽

Morphological Transformations html

1圖像腐蝕

腐蝕的基本思想:侵蝕前景物體的邊界(老是試圖保持前景爲白色);內核在圖像中滑動(如在2D卷積中).只有當內核下的全部像素都是1時,原始圖像中的像素(1或0)纔會被認爲是1,不然它會被侵蝕(變爲零).函數

邊界附近的全部像素都將被丟棄,具體取決於內核的大小.所以,前景對象的厚度或大小減少,或者圖像中的白色區域減少.
它有助於消除小的白噪聲,分離兩個鏈接的對象
原圖:ui

clipboard.png

代碼spa

import cv2
import numpy as np

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

kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img,kernel,iterations = 1)

cv2.imshow('src',img)
cv2.imshow('show',erosion)
cv2.waitKey()

效果圖:
clipboard.pngcode

2膨脹

它剛好與侵蝕相反。 這裏,若是內核下的至少一個像素爲「1」,則像素元素爲「1」. 所以它增長了圖像中的白色區域或前景對象的大小增長.
一般,在去除噪音的狀況下,腐蝕以後是膨脹.由於,侵蝕會消除白噪聲,但它也會縮小咱們的物體,因此咱們膨脹它,因爲噪音消失了,它們不會再回來,則咱們的物體區域會增長。 它也可用於鏈接對象的破碎部分.orm

代碼htm

import cv2
import numpy as np

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

kernel = np.ones((5,5),np.uint8)
dilation = cv2.dilate(img,kernel,iterations = 1)

cv2.imshow('src',img)
cv2.imshow('show',dilation)
cv2.waitKey()

clipboard.png

3開運算

cv2.morphologyEx() :先腐蝕再膨脹,有助於消除噪音.
代碼對象

import cv2
import numpy as np
import matplotlib.pylab  as plt

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

kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

cv2.imshow('src',img)
cv2.imshow('show',opening)
cv2.waitKey()

clipboard.pngclipboard.png

4閉運算

先膨脹後腐蝕,用於消除前景對象內的小孔或對象上的小黑點.
代碼blog

import cv2
import numpy as np

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

kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

cv2.imshow('src',img)
cv2.imshow('show',closing)
cv2.waitKey()

clipboard.png
clipboard.png

5形態學梯度

圖像的膨脹和腐蝕之間的差別,結果看起來像目標的輪廓
代碼ip

import cv2
import numpy as np

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

kernel = np.ones((5,5),np.uint8)
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)


cv2.imshow('src',img)
cv2.imshow('show',gradient)
cv2.waitKey()

clipboard.png

6頂帽(Top Hat)

原圖像與開運算圖的區別,突出原圖像中比周圍亮的區域
代碼

import cv2
import numpy as np

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

kernel = np.ones((5,5),np.uint8)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)


cv2.imshow('src',img)
cv2.imshow('show',tophat)
cv2.waitKey()

clipboard.pngclipboard.png

7黑帽(Black Hat)

閉運算圖 - 原圖像,突出原圖像中比周圍暗的區域
代碼

import cv2
import numpy as np

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

kernel = np.ones((5,5),np.uint8)
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

cv2.imshow('src',img)
cv2.imshow('show',blackhat)
cv2.waitKey()

clipboard.pngclipboard.png

結構元素

咱們在Numpy的幫助下建立了前面示例中的矩形結構元素. 但在某些狀況下,可能須要橢圓/圓形內核。 因此爲此,OpenCV有一個函數cv2.getStructuringElement(). 只需傳遞內核的形狀和大小,便可得到所需的內核.
代碼

# Rectangular Kernel
cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))

Out[4]: 
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))
Out[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))
Out[6]: 
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)
相關文章
相關標籤/搜索