OpenCV 形态学腐蚀

99封情书 提交于 2020-01-16 22:02:05

1、基本概念
腐蚀与膨胀是一对相反的操作,所以腐蚀就是求全局最小值的操作。
腐蚀(erode)是求局部最小值的操作。从数学角度讲,膨胀或腐蚀操作就是将图像(或图像的一部分区域,称之为A)与核(称之为B)进行卷积。核B与图形卷积,即计算核B覆盖的区域的像素点的最小值,并把这个最小值赋值给参考点指定的像素。这样就会使图像中的高亮区域逐渐减小,如图所示,这就是膨胀操作的初衷。
核可以是任何形状和大小,它拥有一个单独定义出来的参考点,我们称其为锚点(anchorpoint)。多数情况下,核是一个小的,中间带有参考点和实心正方形或者圆盘。其实可以将核看作模板或者掩码。
在这里插入图片描述
公式为:
在这里插入图片描述

2、API函数讲解

C++:void erode(InputArray src,OutputArray dst,InputArray kernel,
				Point anchor=Point(-1-1),int iterations=1,int borderType=BORDER_CONSTANT,
				const Scalar& borderValue=morphologyDefaultBorderValue());
参数1:输入图像
参数2:目标图像,和原图像有相同的尺寸和类型
参数3:腐蚀操作核。当为NULL时,表示使用参考点位于中心3*3的核
	我们一般使用函数getStructuringElement配合这个参数使用。getStructuringElement函数会返回指定形状和尺寸的结构原始(内核矩阵)。其中getStructuringElement函数的第一个参数表示内核的形状,有如下三种形状可以选择(MORPH_RECT:矩形		MORPH_CROSS:交叉形		MORPH_ELLIPSE:椭圆形)
	而getStructuringElement函数的第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调研erode或dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。

参数4:锚点的位置,有默认值(-1-1),表示锚点位于中心。
参数5:迭代使用erode()函数的次数,默认值为1.
参数6:用于推断图像外部像素的某种边界模式。
参数7:当边界为常数是的边界值,有默认值morphologyDefaultBorderValue(),一般不去管它。需要用到它时,可以查看官方文档。

3、案例

void erodeFun()
{
	Mat src = imread("img.jpg");

	namedWindow("原图", 0);
	imshow("原图", src);

	//获取自定义核
	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
	Mat dst;

	//进行腐蚀操作
	erode(src, dst, element);

	namedWindow("腐蚀", 0);
	imshow("腐蚀", dst);
}
}

在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!