膨胀、腐蚀、开操作、闭操作、形态学梯度、顶帽、黑帽详解
程序员文章站
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); //黒帽运算
图片腐蚀,中间文字白部分变细
图片膨胀,中间白部分变大扩张
形态学梯度,得到图片的轮廓信息
顶帽操作会得到比原轮廓邻近点亮部分的区域
黑帽操作会得到比原轮廓邻近的更暗的区域,且和选择的核的大小有关