- 🚀 个人简介: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<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/types_c.h>
#include<opencv2/imgproc.hpp>
#include<iostream>
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<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/types_c.h>
#include<opencv2/imgproc.hpp>
#include<iostream>
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++】计算机视觉