OpenCV之形态学操作

形态学操作包含以下操作:

  • 腐蚀 (Erosion)
  • 膨胀 (Dilation)
  • 开运算 (Opening)
  • 闭运算 (Closing)
  • 形态梯度 (Morphological Gradient)
  • 顶帽 (Top Hat)黑帽(Black Hat)

其中腐蚀和膨胀操作是最基本的操作,其他操作由这两个操作变换而来。

腐蚀

        用一个结构元素扫描图像中每一个像素,结构元素中的每一个像素与其覆盖像素与操作,都为1,则该像素为1,否则为0,腐蚀的作用是消除物体边界点,消除小于结构元素的噪声点。

void erode( InputArray src, OutputArray dst, InputArray kernel,
            Point anchor = Point(-1,-1), int iterations = 1,
            int borderType = BORDER_CONSTANT,
            const Scalar& borderValue = morphologyDefaultBorderValue() );

src,dst:输入输出图像,可以相同;

kernel:结构元素,一般使用Ma来确定结构元素;

anchor:结构元素的描点;

iterations:操作次数;

borderType:边界类型;

borderValue:边界值,当borderType=BORDER_CONSTANT时有效;

实例:

    Mat kernal = Mat::ones(3,3,CV_8UC1);
    kernal.at<uchar>(0,1) = 0;
    kernal.at<uchar>(1,1) = 0;
    kernal.at<uchar>(2,1) = 0;
    cv::erode(_src,_src,kernal,Point(-1,-1),3);

                                                                        原始图像 

 

                                                                        腐蚀图像 

膨胀

void dilate( InputArray src, OutputArray dst, InputArray kernel,
            Point anchor = Point(-1,-1), int iterations = 1,
            int borderType = BORDER_CONSTANT,
            const Scalar& borderValue = morphologyDefaultBorderValue() );

参数意义与腐蚀完全相同

实例

    Mat kernal = Mat::ones(3,3,CV_8UC1);
    kernal.at<uchar>(1,0) = 0;
    kernal.at<uchar>(1,1) = 0;
    kernal.at<uchar>(1,2) = 0;
    cv::dilate(_src,_src,kernal,Point(-1,-1),3);

膨胀图像

开运算

        开运算是先腐蚀后膨胀,作用是分离物体,消除小区域,消除噪点,而不影响原来图像

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() );

其中op设置为MORPH_OPEN

实例:

Mat kernal = Mat::ones(3,3,CV_8UC1);
cv::morphologyEx(src,src,MORPH_OPEN,kernal,Point(-1,-1),2);

原图:

开运算后的图像:

 闭运算

闭运算是先膨胀后腐蚀,作用是消除闭合物体里面的孔洞,可以填充闭合区域。

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() );

其中op设置为MORPH_CLOSE

形态梯度

        膨胀图与腐蚀图之差,能够保留物体的边缘轮廓。

 cv.morphologyEx(img,cv.MORPH_TOPHAT)

礼帽运算

        原图像与开运算的结果差,开运算放大了裂缝或者局部低亮度的区域,因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,操作和选择的核的大小相关。礼帽运算用来分离比邻近点亮一些的斑块。 当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。

 cv.morphologyEx(img,cv.MORPH_TOPHAT)

黑帽运算

        闭运算的结果图与原图像之差,闭运算填充了裂缝或者扩大局部高亮度的区域,因此,从结果图中减去原图后,得到的效果图突出了比原图区域更暗的区域,且这一操作和选择的核的大小相关,黑帽运算用来分离比邻近点暗一些的斑块。

 cv.morphologyEx(img,cv.MORPH_BLACKHAT)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

视图猿人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值