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

文章目录

前言开运算参考代码

闭运算参考代码

前言

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

开运算

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

参考代码

void morphologyEx(

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

#include

#include

#include

#include

using namespace std;

using namespace cv;

int main()

{

cv::Mat srcImage = cv::imread("...cc.png");

if (!srcImage.data)

return 1;

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

return 0;

}

闭运算

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

参考代码

void morphologyEx(

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

#include

#include

#include

#include

using namespace std;

using namespace cv;

int main()

{

cv::Mat srcImage = cv::imread("C:\\Users\\86173\\Desktop\\cc.png");

if (!srcImage.data)

return 1;

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

return 0;

}

其他:

更多专栏订阅:

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

查看原文