opencv-形态学处理morphologyEx()函数 开运算、闭运算、形态学梯度、顶帽、黑帽

【概念】它利用基本的膨胀和腐蚀技术,来执行更加高级的形态学变换,如开闭运算、形态学梯度、“顶帽”、“黑帽”等等。

开运算(Opening Operation)是先腐蚀后膨胀的过程。(可以用来消除孤立的小点,毛刺等同时并不明显改变其面积。)其数学表达式如下:

闭运算(Closing Operation)先膨胀后腐蚀的过程,能够让断裂的部分被填平,比如小孔、裂缝(黑色区域)。其数学表达式如下:

 

形态学梯度(Morphological Gradient)为膨胀图与腐蚀图之差,(用来保留物体的边缘轮廓)数学表达式如下:

顶帽运算(Top Hat)为原图像与“开运算“的结果图之差,(用来分离比邻近点亮一些的斑块)数学表达式如下:

黑帽(Black Hat)运算为”闭运算“的结果图与原图像之差(用来分离比邻近点暗一些的斑块),数学表达式为:

 【原型】

C++: void morphologyEx( InputArray src,
                        OutputArray dst,
                        int op,
                        InputArraykernel,
                        Pointanchor=Point(-1,-1),
                        intiterations=1,
                        intborderType=BORDER_CONSTANT,
                        constScalar& borderValue=morphologyDefaultBorderValue() );

参数1,InputArray类型的src,输入图像,填Mat类的对象即可。
参数2:OutputArray类型的dst,即目标图像,需要和源图片有一样的尺寸和类型。
参数3:int类型的op,表示形态学运算的类型,可以是如下之一的标识符:

  • MORPH_OPEN – 开运算(Opening operation)
  • MORPH_CLOSE – 闭运算(Closing operation)
  • MORPH_GRADIENT -形态学梯度(Morphological gradient)
  • MORPH_TOPHAT - “顶帽”(“Top hat”)
  • MORPH_BLACKHAT - “黑帽”(“Black hat“)

参数4:InputArray类型的kernel,形态学运算的内核。若为NULL时,表示的是使用参考点位于中心3x3的核。

参数5:Point类型的anchor,锚的位置,其有默认值(-1,-1),表示锚位于中心。
参数6:int类型的iterations,迭代使用函数的次数,默认值为1。
参数7:int类型的borderType,用于推断图像外部像素的某种边界模式。
参数8:const Scalar&类型的borderValue,当边界为常数时的边界值,有默认值morphologyDefaultBorderValue(),一般不用管。
【实例】

#include <opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>

using namespace cv;

int main()
{
    //载入原始图  
    Mat srcImage = imread("D:\\study\\picture\\a.jpg");   
    //显示原始图 
    imshow("【原始图】", srcImage);
    //定义核
    Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
    //定义输出图像
    Mat dstImage1, dstImage2, dstImage3, dstImage4, dstImage5;
    //进行形态学操作
    morphologyEx(srcImage, dstImage1, MORPH_OPEN, element);//开运算
    morphologyEx(srcImage, dstImage2, MORPH_CLOSE, element);//闭运算
    morphologyEx(srcImage, dstImage3, MORPH_GRADIENT, element);//形态学梯度
    morphologyEx(srcImage, dstImage4, MORPH_TOPHAT, element);//顶帽
    morphologyEx(srcImage, dstImage5, MORPH_BLACKHAT, element);//黑帽

    //显示效果图 
    imshow("【效果图】开运算", dstImage1);
    imshow("【效果图】闭运算", dstImage2);
    imshow("【效果图】形态学梯度", dstImage3);
    imshow("【效果图】顶帽", dstImage4);
    imshow("【效果图】黑帽", dstImage5);

    waitKey(0);

    return 0;
}

开运算

闭运算

 形态学梯度&顶帽

黑帽

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值