OpenCV学习(36)

本文详细介绍了OpenCV中用于图像处理的morphologyEx函数,包括其参数意义和使用方法,涉及形态学运算如开闭运算、形态学梯度等,并讲解了如何使用getStructuringElement获取内核。
摘要由CSDN通过智能技术生成

图像处理(3):

形态学滤波(5):核心API函数: morphologyEx()

上面已经讲到,morphologyEx函数利用基本的膨胀和腐蚀技术,来执行更加高级形态学变换,如开闭运算、形态学梯度、“顶帽”、“黑帽”等。下面我们来详细地讲解它的参数意义和使用方法。
   C++: void morphologyEx(
   InputArray src,
   outputArray dst,int op,
   InputArraykernel,
   Pointanchor=Point (-1,-1) ,intiterations=l,
   intborderType=BORDER_CONSTANT,
   constScalar& bordervalue=morphologyDefaultBordervalue () );
·第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。图像位深应该为以下5种之一:CV_8U.CV_16U.CV_16S.CV_32F和 CV_64F。
·第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。
·第三个参数,int类型的op,表示形态学运算的类型,可以是如表6.2中任意之一的标识符。

   对于OpenCV2,另有CV版本的标识符也可选择,如CV_MOP_CLOSE、cV_MOP_GRADIENT 、 cV_MOP_TOPHAT . cV_MOP_BLACKHAT ,这是OpenCV1.0系列版本遗留下来的标识符,在OpenCV2中和上面的“MORPH_OPEN"具有一样的效果,但已经在 OpenCV3中废止。
  ·第四个参数,InputArray类型的kernel,形态学运算的内核。若为NULL,表示的是使用参考点位       于中心3×3的核。一般使用函数 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 =getStructuringElement (MORPH_RECT,
      Size(2*g _nStructElementSize+1,2*g_nStructElementSize+1),

      Point(g_nStructElementsize, g_nStructElementSize ) );

之后,便可以在调用erode、dilate或morphologyEx函数时,由kernel参数填保存 getStructuringElement返回值的Mat类型变量。对应于上面的示例,就是填element变量。
  ·第五个参数,Point类型的anchor,锚的位置,其有默认值(-1,-1),表示锚位于中心。
   第六个参数,int类型的 iterations,迭代使用函数的次数,默认值为1。

   第七个参数,int类型的 borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_ CONSTANT。
  ·第八个参数,const Scalar&类型的borderValue,当边界为常数时的边界值,有默认值morphologyDefaultBorderValue(),一般不用去管它。需要用到它时,可以看官方文档中的createMorphologyFilter()函数得到更详细的解释。其中的这些操作都可以进行就地(in-place)操作,且对于多通道图像,每一个通道都单独进行操作。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值