Python調用OpenCV形態學

圖像形態學處理包括腐蝕、膨脹、開運算、閉運算、形態學梯度、禮帽(頂帽)、黑帽等運算。

1、腐蝕

腐蝕可以理解爲前景像素會被腐蝕爲背景像素,以白色255爲前景,得到的效果就是白色變小、變細,黑色變大變粗:

import cv2 
import numpy as np 
img = cv2.imread('lena.jpg',0) 
kernel = np.ones((5,5),np.uint8) 
erosion = cv2.erode(img,kernel,iterations = 1) 

cv2.imshow("img", img) 
cv2.imshow("erosion", erosion) 
cv2.waitKey(0) 
cv2.destroyAllWindows()

 

2、膨脹

與腐蝕相反的操作,效果是前景變大變粗,背景變小變細:

import cv2 
import numpy as np 
img = cv2.imread('lena.jpg',0) 
kernel = np.ones((5,5),np.uint8) 
dilation = cv2.dilate(img,kernel,iterations = 1)

cv2.imshow("img", img) 
cv2.imshow("dilation ", dilation ) 
cv2.waitKey(0) 
cv2.destroyAllWindows()

 

3、閉運算

閉運算是先膨脹後腐蝕,這樣的處理結果是前景中的小黑洞會被填充:    import cv2 

import numpy as np 
img = cv2.imread('lena.jpg',0) 
kernel = np.ones((5,5),np.uint8) 
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

cv2.imshow("img", img) 
cv2.imshow("closing ", closing ) 
cv2.waitKey(0) 
cv2.destroyAllWindows()

 

4、開運算

開運算與閉運算相對,是先腐蝕後膨脹,效果是講背景中的小亮點去掉:

import numpy as np 
img = cv2.imread('lena.jpg',0) 
kernel = np.ones((5,5),np.uint8) 
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

cv2.imshow("img", img) 
cv2.imshow("opening", opening ) 
cv2.waitKey(0) 
cv2.destroyAllWindows()

 

5、形態學梯度

形態學梯度做的處理是一幅圖像的膨脹與腐蝕做差得到:

import numpy as np 
img = cv2.imread('lena.jpg',0) 
kernel = np.ones((5,5),np.uint8) 
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

cv2.imshow("img", img) 
cv2.imshow("gradient", gradient) 
cv2.waitKey(0) 
cv2.destroyAllWindows()

 

6、頂帽

頂帽是指原圖與開運算結果做差:

import numpy as np 
img = cv2.imread('lena.jpg',0) 
kernel = np.ones((5,5),np.uint8) 
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

cv2.imshow("img", img) 
cv2.imshow("tophat ", tophat) 
cv2.waitKey(0) 
cv2.destroyAllWindows()

7、黑帽

黑帽則是與頂帽相對,閉運算與原圖做差:

import numpy as np 
img = cv2.imread('lena.jpg',0) 
kernel = np.ones((5,5),np.uint8) 
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

cv2.imshow("img", img) 
cv2.imshow("tophat ", tophat) 
cv2.waitKey(0) 
cv2.destroyAllWindows()

 

8、結構化元素

前面的幾個處理中都有一個核,這個核都是用Numpy來構造的矩形核,其實還可以通過OpenCV提供的cv2.getStructuringElement()來獲取其它形狀的核:

# 矩形核
cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)) 
# 橢圓形
cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)) 
# 十字交叉
cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))

南風之薰兮,

可以解吾民之慍兮。

南風之時兮,

可以阜吾民之財兮。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章