1
2
3
import cv2 as cv
import numpy as np
import ipykernel

腐蚀原理

这里是针对二值图像,黑白图像!可以说其矩阵元素是由0,1组成,0表示黑,1即255表示白。我们用一个全1的卷积核进行卷积,比如33的卷积核,每一次点乘运算的时候,如果图像中对应3\3个元素的值也都是1,这样最终结果就输出1,否则,全是0。

img

显然,上述操作就会导致,边界处外面是黑,里面是白,那么在边界处进行卷积时,结果会把原来像素位置变为0,也就是白色部分向内腐蚀!腐蚀可以迭代,显然迭代次数越多,边界越向内,腐蚀就会越深,一直到腐蚀没了!

其最大的作用就是比如在下图中,字上有一些非常刺眼的噪声,就是那些格格不入的白线。

image-20231017001857048

我们用腐蚀几次就可以把噪声去除了!

1
2
3
4
5
6
7
#腐蚀操作
img = cv.imread("def.jpg", cv.IMREAD_COLOR)
kernel = np.ones((5, 5), np.uint8)#矩阵表示核数,越大腐蚀越多
erosion = cv.erode(img, kernel, iterations=1)#迭代次数,越多腐蚀越大
plt.imshow(erosion)
plt.axis("off")
plt.show()
1
2
3
4
5
6
7
8
9
10
kernel = np.ones((5, 5), np.uint8)
erosion_1 = cv.erode(img, kernel, iterations=1)
erosion_2 = cv.erode(img, kernel, iterations=2)
erosion_3 = cv.erode(img, kernel, iterations=3)
erosion_4 = cv.erode(img, kernel, iterations=4)
res = np.hstack((img, erosion_1, erosion_2, erosion_3, erosion_4))
plt.imshow(res)
plt.axis("off")
plt.show()
#多次迭代比较

image-20231017002403247

我们如果迭代两次,效果如下:

image-20231017002424379

可以看到白色无用的线没有了。

那么同理膨胀操作,是不是已经明白了呢。