一、腐蚀:
消除图像中不重要的边缘信息。
二、膨胀:
可以看作为腐蚀的逆过程。
三、开运算:
开运算(open) ,先腐蚀后膨胀的过程。开运算可以用来消除小黑点,在纤细点处分离物体、平滑较大物体的边界的 同时并不明显改变其面积。
四、闭运算:
闭运算(close),先膨胀后腐蚀的过程。闭运算可以用来排除小黑洞。
五、梯度:
形态学梯度(morph-grad),可以突出团块(blob)的边缘,保留物体的边缘轮廓。
六、顶帽:
顶帽(top-hat),将突出比原轮廓亮的部分。
七、黑帽:
黑帽(black-hat),将突出比原轮廓暗的部分。
参考代码如下:
import cv2 as cvimport numpy as np import matplotlib.pyplot as pltplt.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()
结果如下所示: