作用:
开运算(先腐蚀后膨胀) : 用来消除小物体,再纤细点处分离物体,并且再光滑较大的物体的边界的同时不明显改变其面积
闭运算 (先膨胀后腐蚀):能够排除小型黑洞
形态学梯度 (膨胀 减去 腐蚀): 对二值图像进行这一操作可以把blob的边缘突出出来,我们可以用
形态学梯度来保留物体的边缘轮廓
顶帽 (原图 减去 开运算): 由于开运算的结果是放大了裂缝或者局部低亮度的区域,因此,再原图中减去开运算后的图 -------- 得到比原图轮廓周围更明亮的区域
往往用来分离比临近点亮一些的版块
黑帽(闭运算 减去 原图) : 突出了比原图轮廓周围区域更暗的区域
用来分离比临近点暗一些的斑块
MorphologyEx
CV_EXPORTS_W 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() );
第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可.图像位深应该为以下5种之一:CV_8U、CV_16U、CV_16S、CV_32F和CV_64F。
第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。
第三个参数,int类型的op,表示形态学运算的类垣,可以是如表6.2中任意之一的标识符。
MORPH_OPEN 开运算
MORPH_CLOSE 闭运算
MORPH_GRADIENT 形态梯度学
MORPH_TOPHAT 顶帽
MORPH_BLACKHAT 黑帽
MORPH_ERODE 腐蚀
MORPH_DILATE 膨胀
第四个参数,InputArray类型的kernel,形态学运算的内核,若为NULL,表示的是使用参考点位于中心3x3的核。一航使用函数getStructuringElement配合这个参数的使用。getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。关于getStructuringElement我们之前有讲到过,这里为了大家参阅方便,再写一道。
getStructuringElement函数的第一个参数表示内核的形状,我们可以选择如下三种形状之一:
矩形--MORPH_RECT
交叉形--MORPH_CROSS
椭圆形--MORPH_ELLIPSE
而getStructuringElement函数的第二和第三个参数分别是内核的尼寸以及锚点的位置。
一般在调用erode以及dilate函数之前,要先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心。另外需要注意:十字形的element形状唯一依赖于锚点的位置。而在其他情况下,锚点只是影响形态学运算结果的偏移。
getStructuringElement函数相关的调用示例代码如下。
Int g_nStructElementSize=3;//结构元素(内核矩阵)的尺寸 //获取自定义核 Mat element = getStructuringEllement(MORPH_RECT, Size(2 * g_nStructBLlementSize + 1, 2 * g_nStructElementSize + 1 ), Point(g_nStructELlementSize, g_nStructElementSize));
调用之后,我们可以在接下来调用erode或dilate函数时,在第三个参数填保存了getStructuringElement返回值的Mat类型变量。对应于上面的示例,就是element变量。
第五个参数,Point类型的anchor,锚的位置,其有默认值(-1,-1),表示锚位于中心。
第六个参数,int类型的iterations,迭代使用函数的次数,默认值为1。
第七个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_CONSTANT。
第八个参数,constScalar&类型的bordervalue,当边界为常数时的边界值,有默认值morphologyDefaultBorderValue(),一般不用去管它。需要用到它时,可以看官方文档中的createMorphologyFilter()函数得到更详细的解释。其中的这些操作都可以进行就地(in-place)操作,且对于多通道图像,每一个通道都单独进行操作。
标签:运算,MORPH,滤波,形态学,OpenCV,参数,getStructuringElement,CV,函数 From: https://www.cnblogs.com/lengblog/p/17324754.html