膨胀、腐蚀、开操作、闭操作、形态学梯度、顶帽、黑帽详解

1.膨胀与腐蚀
膨胀与腐蚀都是对图片的白色部分而言。膨胀是图片中的高亮部分进行扩张,腐蚀是高亮部分缩小。
函数形式:

第一个参数:InputArray src,//输入

第二个参数:OutputArray dst,//输出

第三个参数:InputArray kernel,//(核大小一般配合getStructuringElement()使用;先定义一个Mat类型的变量来接受getStructuringElement()的返回值:返回指定形状和尺寸的结构元素;

格式:

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

参数:

形状:表核的形状,矩形MORPH_RECT;交叉形MORPH_CROSS;椭圆形MORPH_ELLIPSE;

ksize:核尺寸大小;)

第四个参数:锚点的位置,锚点只影响形态学运算结果的偏移;默认值,( - 1,-1)为中心

第五个参数:int iterations = 1,//迭代次数

第六个参数:int borderType = BORDER_CONSTANT,//图像边界像素模式

第七个参数:const Scalar&borderValue = morphologyDefaultBorderValue()//边界值

膨胀和腐蚀示例程序如下:

 Mat out;
 //获取自定义核
  Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); 
   //膨胀操作
  dilate(img, out, element);
   //膨胀操作
  erode(img, out, element);
  //如果需要多次迭代,迭代5次
   erode(img, out, element,Point(-1,-1),5);

2.开操作、闭操作、形态学梯度、顶帽、黑帽

开运算:先腐蚀再膨胀,用来消除小物体,在纤细处分离物体和平滑较大物体边界的作用

闭运算:先膨胀再腐蚀,用于排除小型黑洞,它具有填充物体内细小空洞,连接邻近物体和平滑边界的作用

形态学梯度:就是膨胀图与俯视图之差,用于保留物体的边缘轮廓。

顶帽:原图像与开运算图之差,用于分离比邻近点亮一些的斑块。

黑帽:闭运算与原图像之差,用于分离比邻近点暗一些的斑块。

示例如下:

  Mat srcImg = imread("E://1.jpg");
  Mat dstImg;
  Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));
  //morphologyEx(srcImg, dstImg, MORPH_OPEN, element);  //开运算
  //morphologyEx(srcImg, dstImg, MORPH_CLOSE, element);  //闭运算
  //morphologyEx(srcImg, dstImg, MORPH_GRADIENT, element);  //形态学梯度运算
  //morphologyEx(srcImg, dstImg, MORPH_TOPHAT, element);  //顶帽运算
  morphologyEx(srcImg, dstImg, MORPH_BLACKHAT, element);  //黒帽运算

图片腐蚀,中间文字白部分变细
在这里插入图片描述
图片膨胀,中间白部分变大扩张
在这里插入图片描述
形态学梯度,得到图片的轮廓信息
在这里插入图片描述
顶帽操作会得到比原轮廓邻近点亮部分的区域
在这里插入图片描述
黑帽操作会得到比原轮廓邻近的更暗的区域,且和选择的核的大小有关
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43491924/article/details/89422554