一、图像的腐蚀
它会侵蚀前景物体的边界,并从图像中移除小规模的细节,但同时会减少感兴趣区域的大小。在该操作中,对图像中任意形状的奇数大小的卷积核进行卷积,如果核下的所有像素都为1,则认为原始图像中的像素(1或0)为1,否则将其侵蚀,即使其为零。因此,根据内核的大小,所有靠近边界的像素都将被丢弃。因此前景物体的厚度或大小减小或者图像中的白色区域减小。该方法适用于去除小的白噪声和分离两个连通的物体。基本上,它计算给定核区域上的局部最小值。前景物体的厚度或大小会减少换句话说,图像中的白色区域会减少。
import cv2
import numpy as np
src_img = cv2.imread("2-1.jpg", cv2.IMREAD_UNCHANGED)
cv2.imshow("src_img", src_img)
#定义要处理的卷积核大小和卷积核的类型,这里定义了两种,比较效果
k1 = np.ones((3, 3), np.uint8)
k2 = np.ones((5, 5), np.uint8)
res_img_1 = cv2.erode(src_img, k1)
res_img_2 = cv2.erode(src_img, k2)
cv2.imshow("res_img_1", res_img_1)
cv2.imshow("res_img_2", res_img_2)
cv2.waitKey(0)
cv2.destroyAllWindows()
二、图像的膨胀
膨胀操作通常使用一种构造元素来探测和扩展输入图像中包含的形状。这种作用与侵蚀相反。在此操作中,对图像中任意形状的奇数大小的卷积核进行卷积,如果核下至少有一个像素为1,则该像素元素为1。所以它增加了图像中的白色区域或者前景物体的大小增加了。为了去除噪声,侵蚀之后是膨胀。因为,侵蚀会去除白噪声,但也会缩小我们的物体。所以我们把它扩张。因为噪音消失了,它们不会再回来,但我们的目标面积增加了。它在连接对象的破碎部分时也很有用。
import cv2
import numpy as np
src_img = cv2.imread("2-1.jpg", cv2.IMREAD_UNCHANGED)
cv2.imshow("src_img", src_img)
k1 = np.ones((3, 3), np.uint8)
k2 = np.ones((5, 5), np.uint8)
res_img_1 = cv2.dilate(src_img, k1)
res_img_2 = cv2.dilate(src_img, k2)
cv2.imshow("res_img_1", res_img_1)
cv2.imshow("res_img_2", res_img_2)
cv2.waitKey(0)
cv2.destroyAllWindows()
腐蚀操作一般用于消去图像中不需要的粘连部分,而膨胀操作则用于填充图像内的空白部分,同时也可以恢复图像由于进行腐蚀操作后缩小的面积。