欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 11:56:54
...

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);  //黒帽运算

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