0


【OpenCv • c++】形态学技术操作 —— 开运算与闭运算

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

文章目录

前言

在上一篇文章中,我们了解了腐蚀与膨胀的原理与实现,今天我们继续学习形态学技术操作里面的开运算与闭运算。

开运算

Q:****什么是开运算?
A: 我们将先腐蚀后膨胀称为开运算,开运算能够去除孤立的小点,毛刺和小桥(即联通两块区域的小点),而总的位置和形状不变。

参考代码

voidmorphologyEx(
    InputArray src,
    OutputArray dst,int op,
    InputArray kernel,
    Point anchor =Point(-1,-1),int iterations =1,int borderType = BORDER_CONSTANT,const Scalar&borderValue = morph -ologyDefaultBorderValue())

其中,

src

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

dst

表示输出图像,

op

表示形态学操作算子类型,可以设置为

MORPH_OPEN

开操作,

MORPH_CLOSE

闭操作,

MORPH_GRADIENT

形态学梯度操作,

MORPH_TOPHAT

顶帽操作,

MORPH_BLACKHAT

黑帽操作,

iterations

可以选择对图像进行多次形态学运算,

borderValue 

borderType 

为可选参数设置,针对边界处理。

#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/types_c.h>#include<opencv2/imgproc.hpp>#include<iostream>usingnamespace std;usingnamespace cv;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(10,10));// 形态学闭操作
    cv::Mat closeMat;
    cv::morphologyEx(segDst, closeMat, cv::MORPH_CLOSE, element);

    cv::imshow(" srcGray ", srcGray);
    cv::imshow(" closeMat", closeMat);
    
    cv::waitKey();return0;}

在这里插入图片描述

闭运算

Q:****什么是闭运算?
A:我们将先膨胀后腐蚀成为闭运算,闭运算能够填平小孔,弥合小裂缝,而总的位置和形态不变。

参考代码

voidmorphologyEx(
    InputArray src,
    OutputArray dst,int op,
    InputArray kernel,
    Point anchor =Point(-1,-1),int iterations =1,int borderType = BORDER_CONSTANT,const Scalar&borderValue = morph -ologyDefaultBorderValue())

其中,

src

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

dst

表示输出图像,

op

表示形态学操作算子类型,可以设置为

MORPH_OPEN

开操作,

MORPH_CLOSE

闭操作,

MORPH_GRADIENT

形态学梯度操作,

MORPH_TOPHAT

顶帽操作,

MORPH_BLACKHAT

黑帽操作,

iterations

可以选择对图像进行多次形态学运算,

borderValue 

borderType 

为可选参数设置,针对边界处理。

#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/types_c.h>#include<opencv2/imgproc.hpp>#include<iostream>usingnamespace std;usingnamespace cv;intmain(){
    cv::Mat srcImage = cv::imread("C:\\Users\\86173\\Desktop\\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(10,10));//形态学开操作
    cv::Mat openMat;
    cv::morphologyEx(segDst, openMat, cv::MORPH_OPEN, element);
    

    cv::imshow(" srcGray ", srcGray);
    cv::imshow(" openMat", openMat);
    
    cv::waitKey();return0;}

在这里插入图片描述
其他

更多专栏订阅:

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

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

“【OpenCv • c++】形态学技术操作 —— 开运算与闭运算”的评论:

还没有评论