代码语言:javascript复制
import cv2
import numpy as np
o=cv2.imread("C:/Users/xpp/Desktop/Lena.png",cv2.IMREAD_UNCHANGED)#原始图像
kernel=np.ones((9,9),np.uint8)#设置核kernel
erosion=cv2.erode(o,kernel,iterations=5)#腐蚀图像
cv2.imshow("original",o)
cv2.imshow("erosion",erosion)
cv2.waitKey()
cv2.destroyAllWindows()
算法:图像腐蚀将图像的边界点消除,使图像沿着边界向内收缩,将小于指定结构体元素部分去除。图像腐蚀用来“收缩”或“细化”二值图像中的前景,实现去除噪声,元素分割等功能。
- 首先设置核kernel
- 然后核kernel遍历图像,当kernel完全位于前景对象内部时,核中心可能分别是[2, 1]、[2, 2]、[2, 3]
- 最后得到腐蚀图像,当kernel完全位于前景对象内部时,将中心点所对应的图像中像素点的值置为1,其他置为0
dst=cv2.erode(src, kernel[, anchor[, iterations[, borderType[, borderValue]]]])
- dst表示腐蚀后的图像,该图像和原始图像具有同样的类型和大小
- src表示输入图像,图像的通道数可以任意。图像的深度是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F
- kernel表示腐蚀操作时采用的结构类型,可以自定义生成或者通过函数cv2.getStructuringElement()生成
- anchor表示element结构中的锚点位置,默认值为(-1,-1),在核中心位置
- borderType表示边界样式,默认值BORDER_CONSTANT
- borderValue表示边界值
注意:图像腐蚀是逐个像素来决定的值,根据结构元和被腐蚀图像的关系来确定腐蚀结果,每次判定的点都与结构元中心点所对应。