一、腐蚀:
消除图像中不重要的边缘信息。
二、膨胀:
可以看作为腐蚀的逆过程。
三、开运算:
开运算(open) ,先腐蚀后膨胀的过程。开运算可以用来消除小黑点,在纤细点处分离物体、平滑较大物体的边界的 同时并不明显改变其面积。
四、闭运算:
闭运算(close),先膨胀后腐蚀的过程。闭运算可以用来排除小黑洞。
五、梯度:
形态学梯度(morph-grad),可以突出团块(blob)的边缘,保留物体的边缘轮廓。
六、顶帽:
顶帽(top-hat),将突出比原轮廓亮的部分。
七、黑帽:
黑帽(black-hat),将突出比原轮廓暗的部分。
参考代码如下:
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
img = cv.imread("./imgs/yh.png")
gray_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
#二值化图像
ret, binary = cv.threshold(gray_img, 52, 255, cv.THRESH_BINARY)
kernel = np.ones((3,3), np.uint8)
#1.腐蚀
img1 = cv.erode(binary, kernel)
#2.膨胀
img2 = cv.dilate(binary, kernel)
#3.开运算:先腐蚀,后膨胀
opening = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel)
#4.闭运算:先膨胀,后腐蚀
closeing = cv.morphologyEx(binary, cv.MORPH_CLOSE, kernel)
#5.梯度 = 膨胀-腐蚀
gradient = cv.morphologyEx(binary, cv.MORPH_GRADIENT, kernel)
#6.顶帽 = 原图-开运算结果
tophat = cv.morphologyEx(binary, cv.MORPH_TOPHAT, kernel)
#7.黑帽 = 闭运算-原图
blackhat = cv.morphologyEx(binary, cv.MORPH_BLACKHAT, kernel)
#可视化展示
til=['二值化图像','图像腐蚀','图像膨胀','开运算','闭运算','梯度','顶帽','黑帽']
lis=[binary,img1,img2,opening,closeing,gradient,tophat,blackhat]
plt.figure(figsize=(10,4))
for i in range(8):
plt.subplot(2,4,i+1)
plt.imshow(lis[i],cmap='gray')
plt.title(til[i])
plt.axis('off')
plt.show()
结果如下所示: