Wmeng0 2019-12-03
膨胀dilate
void dilate(InputArray src,OutputArray dst,InputArray kernel,Point anchor=Point(-1,-1),int iterations=1,int borderType=BORDER_CONSTANT,const Scalar&borderValue=morphologyDefaultBorderValue());
一般第三个参数用getStructuringElement函数配合使用:int g_nStructElementSize = 3;//结构元素(内核矩阵)的尺寸
Mat element=getStructuringElement(MORPH_RECT,Size(2g_nStructElementSize+1,2g_nStructElementSize+1),Point(g_nStructElementSize,g_nStructElementSize));
腐蚀erode
void erode(InputArray src,OutputArray dst,InputArray kernel,Point anchor=Point(-1,-1),int iterations=1,int borderType=BORDER_CONSTANT,const Scalar&borderValue=morphologyDefaultBorderValue());
开运算
dst=open(src,element)=dilate(erode(src,element))
闭运算
dst=close(src,element)=erode(dilate(src,element))
形态学梯度
是膨胀图与腐蚀图之差,可以用来保留物体的边缘轮廓
dst=morph-grad(src,element)=dilate(src,element)-erode(src,element)
注意:
顶帽Top Hat
是原图与开运算的结果图之差,为了突出比原图轮廓周围的区域更明亮的区域
dst=tophat(src,element)=src-open(src,element)
黑帽Black Hat
可以用来分离比临近点暗一些的斑块,效果图有着非常完美的轮廓
dst=blackhat(src,element)=close(src,element)-src