腐蚀就是选择滑动窗口中像素值最小的点(局部最小值)。
公式表示:
可以理解为,移动结构B,如果结构B与结构A的交集完全属于结构A的区域内,则保存该位置点,所有满足条件的点构成结构A被结果B腐蚀的结果。
函数原型:
dst=cv2.erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
膨胀就是选择滑动窗口中像素值最大的点(局部最大值)
公式表示:
可以理解为,将结构B在结构A上进行卷积操作,所有移动结构B与结构A存在交集的位置的集合为结构A在结构B作用下的膨胀结果。
函数原型:
dst=cv2.dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
src:源图,通道数任意,数据类型可以为CV_8U,CV_16U,CV_16S,CV_32F或 CV_64F
dst:输出图,与src有着同样的尺寸
kernel:操作核(结构B),通常这个参数由函数getStructuringElement得到,你要乐意自己写一个也行
anchor:锚点位置,默认值为中心点
iterations:自身迭代的次数,默认为1
常规用于计算 kernel 的函数 getStructuringElement(shape, ksize[, anchor]),函数原型:
retval=cv2.getStructuringElement(shape, ksize[, anchor])
retval:得到的核,矩阵形式
shape:核的形状,有cv2.MORPH_RECT、cv2.MORPH_CROSS和cv2.MORPH_ELLIPSE
ksize:核的大小, (x,y) 形式
anchor:锚点,默认为中心
函数公式:
dst = open(src(x,y)) = dilate(erode(src(x,y)))
先腐蚀后膨胀的操作称为开操作。它具有消除细小物体,在纤细处分离物体和平滑较大的物体边界的作用。
函数原型:
dst = cv2.morphologyEx(src,cv2.MORPH_OPEN,kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
效果图:
使用结构B进行开操作:
公式表示:
dst = open(src(x,y)) = erode(dilate(src(x,y)))
先膨胀后腐蚀的操作称之为闭操纵。它具有填充物体内细小空间,连接邻近物体和平滑边界的作用。
函数原型:
dst = cv2.morphologyEx(src,cv2.MORPH_CLOSE,kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
效果图:
使用结构B进行闭操作:
公式表示:
简单的讲就是膨胀以后的图像减去腐蚀以后的图像。
函数原型:
dst = cv2.morphologyEx(src,cv2.MORPH_GRADIENT,kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
#或者可以这样写
cv2.dilate() - cv2.erode()
公式表示:
简单的讲就是原图减去开运算以后的图像。
函数原型:
dst = cv2.morphologyEx(src,cv2.MORPH_TOPHAT,kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
公式表示:
简单的讲就是闭运算以后的图像减去原图后的图像。
函数原型:
dst = cv2.morphologyEx(src,cv2.MORPH_BLACKHAT,kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
参考链接:
https://blog.csdn.net/qq_30490125/article/details/80490776