接下来介绍图像形态学中的几个基本操作:腐蚀、膨胀、开操作、闭操作。
好吧,其实就是选择滑动窗口中像素值最小的点(局部最小值)
公式表示:
dst=cv2.erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
恩,当然就是局部最大值
公式表示:
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,函数原型:
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)))
先腐蚀后膨胀的操作称之为开操作。它具有消除细小物体,在纤细处分离物体和平滑较大物体边界的作用。
采用上图的结构B对原件进行开操作。
函数原型:
dst = cv2.morphologyEx(src,cv2.MORPH_OPEN,kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
公式表示:
dst = open(src(x,y)) = erode(dilate(src(x,y)))
先膨胀后腐蚀的操作称之为闭操作。它具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。
采用上图的结构对原件进行闭操作。
函数原型:
dst = cv2.morphologyEx(src,cv2.MORPH_CLOSE,kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
公式表示:
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]]]]])