腐蚀
[1] - 腐蚀是一种消除边界点,使边界向内部收缩的过程
可以用来消除小且无意义的物体.
腐蚀算法:
用 3x3 的 kernel,扫描图像的每一个像素;
用 kernel 与其覆盖的二值图像做 “与” 操作;
如果都为1,结果图像的该像素为1;否则为0.
结果:使二值图像减小一圈.
膨胀
[2] - 膨胀是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程
可以用来填补物体中的空洞.
膨胀算法:
用 3x3 的 kernel,扫描图像的每一个像素;
用 kernel 与其覆盖的二值图像做 “与” 操作;
如果都为0,结果图像的该像素为0;否则为1.
结果:使二值图像扩大一圈.
0- 先腐蚀后膨胀的过程称为开运算
用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积.
[4] - 先膨胀后腐蚀的过程称为闭运算
用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积
2.1. 定义 kernel 矩阵
首先定义 kernel 矩阵 - 两种方式:
[1] - 利用 cv2.getStructuringElement 函数
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)) # 椭圆结构
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3)) #十字结构
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) # 矩形结构
# 图像腐蚀 eroded = cv2.erode(png, kernel)
plt.subplot(1, 3, 2)
plt.imshow(eroded) #
Eroded Image plt.axis('off')
# 图像膨胀 dilated = cv2.dilate(png, kernel)
plt.subplot(1, 3, 3) plt.imshow(dilated) # Dilated Image
plt.axis('off')
plt.show()