读书笔记-opencv-形态学处理
常用的形态学处理包括:腐蚀,膨胀,开操作,闭操作,顶帽运算,底帽运算等,其中膨胀腐蚀为最基础的方法。
腐蚀
原理解析
图像的腐蚀是选取每个位置邻域中的最小值座位该位置的输出值。邻域可以是矩形结构,也可以是椭圆形结构,十字交叉结构,大多定义为结构元。
选取每个邻域的最小值,腐蚀后的图像亮度会降低,图像中较亮的区域面积会减小甚至消失。图像I,结构元S的腐蚀操作记为:
E = I ⊝ S E = I⊝S E=I⊝S
对图像进行腐蚀操作缩小了亮度区域的面积,随意针对阈值分割后前景是白色的二值图,可以通过 I − E I-E I−E操作提取边界。
实现代码
对于图像腐蚀opencv提供函数:
erode(src, element[,dst[,iterations[,borderType[,borderValue]]]])
//src 输入矩阵
//element 结构元
//anchor 结构元的锚点
//iterations 迭代的次数
//borderType 边界扩充类型
//borderValue 边界扩充值
对于超出边界,需要扩充图像边界,镜像的方式最好。代表结构元参数element,opencv提供函数:
getStructuringElement(shape, ksize[,anchor])
//shape MORPH_RECT:产生矩形结构元
// MORPH_ELLIPSEM:产生椭圆结构元
// MORPH_CROSS:产生十字交叉结构元
//ksize 结构元尺寸
//anchor 结构元锚点
利用erode和getStrcturingElement函数进行腐蚀操作:
if __name__ =='__main__':
#loading image
image=cv2.imread("G:\\blog\\OpenCV_picture\\chapter6\\img7.jpg",cv2.IMREAD_GRAYSCALE)
cv2.imshow("image",image)
#Entropy threshold
thresh,out=threshEntroy(image)
#show thresh
print(thresh)
out=np.round(out)
out.astype(np.uint8)
#erode
#create element
element = cv2.getStructuringElement