0


【OpenCv • c++】形态学技术操作 —— 腐蚀与膨胀

  • 🚀 个人简介:CSDN「博客新星」TOP 10 , C/C++ 领域新星创作者
  • 💟 作 者:锡兰_CC ❣️
  • 📝 专 栏:【OpenCV • c++】计算机视觉
  • 🌈 若有帮助,还请关注➕点赞➕收藏,不行的话我再努努力💪💪💪

文章目录

前言

形态学腐蚀膨胀操作是形态学的基本操作,常用于图形处理方面,实现了对目标像素点进行拓展的目的。从数学角度来讲,腐蚀膨胀操作就是将图像或者图像的一部分(称之为核A)与核(称之为核B)进行卷积。

腐蚀

Q:****什么是腐蚀?
A: 腐蚀就是求局部最小值的操作,也就是核B与图像进行卷积,计算核B覆盖区域的像素点的最小值,并把最小值赋值给参考点指定的像素,使得图像中的白色区域变小。

参考代码

voiderode(
    InputArray src,
    OutputArray dst,
    InputArray kernel,
    Point anchor =Point(-1,-1),int iterations =1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultB -orderValue())

其中,

src 

代表输入图像(二值化、灰度图像),

dst

代表输出图像,

kernel

表示定义的结构元素大小,

anchor

代表结构元素的中心,如果默认参数为 (-1,-1),程序会自动将其设置为结构元素的中心。

iteration

为迭代次数,可以选择对图像进行多次形态学运算。

borderType

以及

borderValue

是可选择参数设置,针对边界设置。

#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/types_c.h>#include<opencv2/imgproc.hpp>#include<iostream>usingnamespace cv;usingnamespace std;intmain(){
    cv::Mat srcImage = cv::imread("...cc.png");if(!srcImage.data)return1;
    cv::Mat srcGray;cvtColor(srcImage, srcGray, CV_RGB2GRAY);
    cv::Mat segDst, dilDst, eroDst;// 分通道二值化
    cv::inRange(srcGray, cv::Scalar(100),
        cv::Scalar(255), segDst);// 定义结构元素
    cv::Mat element = cv::getStructuringElement(
        cv::MORPH_ELLIPSE, cv::Size(5,5));// 腐蚀膨胀操作
    cv::erode(segDst, eroDst, element);
    cv::imshow(" srcGray ", srcGray);
    cv::imshow(" segDst ", segDst);
    cv::imshow(" eroDst ", eroDst);
    cv::waitKey();return0;}

实现效果

在这里插入图片描述

膨胀

Q:****什么是膨胀?
A: 膨胀就是求局部最大值的操作,也就是核B与图像进行卷积,计算核B覆盖区域的像素点的最大值,并把最大值赋值给参考点指定的像素,使得图像中的白色区域变大。

参考代码

voiddilate(
    InputArray src,
    OutputArray dst,
    InputArray kernel,
    Point anchor =Point(-1,-1),int iterations =1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefault -BorderValue())

其中,

src 

代表输入图像(二值化、灰度图像),

dst

代表输出图像,

kernel

表示定义的结构元素大小,

anchor

代表结构元素的中心,如果默认参数为 (-1,-1),程序会自动将其设置为结构元素的中心。

iteration

为迭代次数,可以选择对图像进行多次形态学运算。

borderType

以及

borderValue

是可选择参数设置,针对边界设置。

#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/types_c.h>#include<opencv2/imgproc.hpp>#include<iostream>usingnamespace cv;usingnamespace std;intmain(){
    cv::Mat srcImage = cv::imread("...cc.png");if(!srcImage.data)return1;
    cv::Mat srcGray;cvtColor(srcImage, srcGray, CV_RGB2GRAY);
    cv::Mat segDst, dilDst, eroDst;// 分通道二值化
    cv::inRange(srcGray, cv::Scalar(100),
        cv::Scalar(255), segDst);// 定义结构元素
    cv::Mat element = cv::getStructuringElement(
        cv::MORPH_ELLIPSE, cv::Size(5,5));// 腐蚀膨胀操作
    cv::dilate(segDst, dilDst, element);
    cv::imshow(" srcGray ", srcGray);
    cv::imshow(" segDst ", segDst);
    cv::imshow(" dilDst ", dilDst);
    cv::waitKey();return0;}

实现效果

在这里插入图片描述

其他

更多专栏订阅:

  • 👍 【开卷数据结构】
  • 💛 【备战蓝桥,冲击省一】
  • 💕 从零开始的 c++ 之旅
  • 💖 【OpenCV • c++】计算机视觉

本文转载自: https://blog.csdn.net/Ceylan__/article/details/130540228
版权归原作者 锡兰_CC 所有, 如有侵权,请联系我们删除。

“【OpenCv • c++】形态学技术操作 —— 腐蚀与膨胀”的评论:

还没有评论