一、腐蚀与膨胀原理

都是只对图像中的高亮区域(白色)作用
1.1、腐蚀原理:模板系数均为1,进行最小值滤波,就是将模板对应的最小值设置为中心点的值。
1.2、膨胀原理:模板系数均为1,进行最大值滤波,就是将模板对应的最大值设置为中心点的值
1.3、作用:消除噪声;分割出独立的图像元素,或者在图像中连接相邻元素;寻找图像中明显的极大值或极小值区域;求出图像梯度

二、函数API

均支持就地操作
2.1、膨胀

void dilate( InputArray src, OutputArray dst, InputArray kernel,
                          Point anchor = Point(-1,-1), int iterations = 1,
                          int borderType = BORDER_CONSTANT,
                          const Scalar& borderValue = morphologyDefaultBorderValue() );

参数src:通道可以任意,但是深度为CV_8U, CV_16U, CV_16S, CV_32F 或CV_64F
参数dst:和原图一样的大小和类型。
参数kernel:结构元素,如果为空(Mat()),则默认是3*3的矩形;可以通过getStructuringElement()函数获得。
参数anchor:锚点,若为负值则默认在中心。
参数iterations:迭代次数。
2.2、腐蚀

void erode( InputArray src, OutputArray dst, InputArray kernel,
                         Point anchor = Point(-1,-1), int iterations = 1,
                         int borderType = BORDER_CONSTANT,
                         const Scalar& borderValue = morphologyDefaultBorderValue() );

三、开运算,闭运算,形态学梯度,顶帽,黑帽

均支持就地操作

 void morphologyEx( InputArray src, OutputArray dst,
                                    int op, InputArray kernel,
                                    Point anchor = Point(-1,-1), int iterations = 1,
                                    int borderType = BORDER_CONSTANT,
                                    const Scalar& borderValue = morphologyDefaultBorderValue() );

参数op:形态学操作类型

MorphTypes:   MORPH_ERODE;     MORPH_DILATE;
               MORPH_OPEN;      MORPH_CLOSE;      MORPH_GRADIENT;
       		   MORPH_TOPHAT;    MORPH_BLACKHAT

3.1 开运算----MORPH_OPEN
原理:先腐蚀后膨胀
    dst = dilate( erode ( src ) )
作用:放大裂缝,消除小的高亮物体,在平滑较大物体的边界是不明显改变其面积

3.2 闭运算----MORPH_CLOSE
原理:先膨胀后腐蚀
    dst = erode ( dilate ( src ) )
作用:消除小型黑洞

3.3 形态学梯度----MORPH_GRADIENT
原理:膨胀图减去腐蚀图
    dst = dilate(src) - erode(src)
作用:保留物体的边缘轮廓

3.4 顶帽----MORPH_TOPHAT
原理:原图减去开运算图
    dst = src - dilate( erode ( src ) )
作用:分离高亮的斑块,背景提取

3.5 黑帽----MORPH_BLACKHAT
原理:闭运算减去原图
    dst = erode ( dilate ( src ) ) - src
作用:分离较暗的斑块

4、获取结构元素的函数getStructuringElement()

Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));

参数shape:三种MORPH_RECT;MORPH_CROSS;MORPH_ELLIPSE
参数ksize:内核大小
参数anchor:锚点位置
作用:返回指定大小、类型的结构元素

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐