腐蚀和膨胀是最基本的形态学操作,腐蚀和膨胀都是针对白色部分(高亮部分)而言的。
膨胀就是使图像中高亮部分扩张,效果图拥有比原图更大的高亮区域;腐蚀是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域。膨胀是求局部最大值的操作,腐蚀是求局部最小值的操作。
- 腐蚀
具体操作是:用一个结构元素扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,如果都为1,则该像素为1,否则为0。如下图所示,结构A被结构B腐蚀后:
腐蚀的作用是:消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点。
cv.erode(img,kernel,iterations)
- img: 要处理的图像
- kernel: 核结构
- iterations: 腐蚀的次数,默认是1
- 膨胀
具体操作是:用一个结构元素扫描图像中的每一个像素,用结构元素中的每一个像素与其覆盖的像素做“与”操作,如果都为0,则该像素为0,否则为1。如下图所示,结构A被结构B膨胀后:
cv.dilate(img,kernel,iterations)
- img: 要处理的图像
- kernel: 核结构
- iterations: 膨胀的次数,默认是1
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 1 读取图像
img = cv.imread("./1.png")
# 2 创建核结构
kernel = np.ones((5, 5), np.uint8)
# 3 图像腐蚀和膨胀
erosion = cv.erode(img, kernel) # 腐蚀
dilate = cv.dilate(img, kernel) # 膨胀
# 4 图像展示
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 8), dpi=100)
axes[0].imshow(img[:, :, ::-1])
axes[0].set_title("原图")
axes[1].imshow(erosion[:, :, ::-1])
axes[1].set_title("腐蚀后结果")
axes[2].imshow(dilate[:, :, ::-1])
axes[2].set_title("膨胀后结果")
plt.show()