图像形态学(腐蚀、膨胀、开运算、闭运算、梯度、顶帽、黑帽)

一、腐蚀:

消除图像中不重要的边缘信息。

二、膨胀:

可以看作为腐蚀的逆过程。

三、开运算:

开运算(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()

结果如下所示:

猜你喜欢

转载自blog.csdn.net/hu_666666/article/details/128063401