图像的腐蚀(erosion)是基本的形态学运算,主要用来寻找图像中极小区域.
一、图像腐蚀基本原理
腐蚀操作就是拿这个结构元素的中心位置(假设参与逻辑计算的元素对应与二维矩阵中元素为1的点,即网格板上的孔),在图像上移动时,如果透过所有的孔都能看到底下的图像,那么这个中心点处的图像就保留,否则去除。
图像A用卷积模板B来进行腐蚀处理,通过模板B与图像A进行卷积计算,得出B覆盖区域的像素点最小值,并用这个最小值来替代参考点的像素值。如图所示,将左边的原始图像A腐蚀处理为右边的效果图A-B。
腐蚀的方法是,拿B的中心点和X上的点一个一个地对比,如果B上的所有点都在X的范围内,则该点保留,否则将该点去掉;右边是腐蚀后的结果。可以看出,它仍在原来X的范围内,且比X包含的点要少,就象X被腐蚀掉了一层。
图像进行腐蚀处理后,高亮区减少(白色区域减少)。
二、图像腐蚀代码实现
形态学转换主要针对的是二值图像(0或1),因此需要将图像进行二值化后再使用卷积核对图像进行腐蚀。卷积核是腐蚀中的关键数组,采用numpy库可以生成。卷积核的中心点逐个像素扫描原始图像。
被扫描到的原始图像中的像素点,只有当卷积核对应的元素值均为1时,其值才为1,否则其值修改为0。换句话说,遍历到的黄色点位置,其周围全部是白色,保留白色,否则变为黑色,图像腐蚀变小。
使用erode函数进行腐蚀
dst = cv2.erode(src, kernel, iterations)
src是图形路径
kernel是卷积核的定义,可以使用np.ones((5,5), np.uint8)
定义一个5*5的卷积核
iterations是迭代次数,默认是1,表示进行一次腐蚀,也可以根据需要进行多次迭代,进行多次腐蚀。
将本地图像进行腐蚀并显示
import cv2
import numpy as np
src=cv2.imread('C:/Users/wanqian/Desktop/1/12.jpg',cv2.IMREAD_UNCHANGED)
#设置卷积核
kernel = np.ones((5,5),np.uint8)
#图像腐蚀处理
erosion=cv2.erode(src,kernel)
#显示图像
cv2.imshow("src",src)
cv2.imshow("result",erosion)
#等待显示
cv2.waitKey(0)
cv2.destroyAlLWindows()
可以看到图像高亮部分减少,但是大体轮廓并没有改变