您现在的位置是:首页 >技术教程 >【OpenCv • c++】形态学技术操作 —— 腐蚀与膨胀网站首页技术教程
【OpenCv • c++】形态学技术操作 —— 腐蚀与膨胀
简介【OpenCv • c++】形态学技术操作 —— 腐蚀与膨胀
- ? 个人简介:CSDN「博客新星」TOP 10 , C/C++ 领域新星创作者
- ? 作 者:锡兰_CC ❣️
- ? 专 栏:【OpenCV • c++】计算机视觉
- ? 若有帮助,还请关注➕点赞➕收藏,不行的话我再努努力???
前言
形态学腐蚀膨胀操作是形态学的基本操作,常用于图形处理方面,实现了对目标像素点进行拓展的目的。从数学角度来讲,腐蚀膨胀操作就是将图像或者图像的一部分(称之为核A)与核(称之为核B)进行卷积。
腐蚀
Q:什么是腐蚀?
A: 腐蚀就是求局部最小值的操作,也就是核B与图像进行卷积,计算核B覆盖区域的像素点的最小值,并把最小值赋值给参考点指定的像素,使得图像中的白色区域变小。
参考代码
void erode(
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>
using namespace cv;
using namespace std;
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(5, 5));
// 腐蚀膨胀操作
cv::erode(segDst, eroDst, element);
cv::imshow(" srcGray ", srcGray);
cv::imshow(" segDst ", segDst);
cv::imshow(" eroDst ", eroDst);
cv::waitKey();
return 0;
}
实现效果
膨胀
Q:什么是膨胀?
A: 膨胀就是求局部最大值的操作,也就是核B与图像进行卷积,计算核B覆盖区域的像素点的最大值,并把最大值赋值给参考点指定的像素,使得图像中的白色区域变大。
参考代码
void dilate(
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>
using namespace cv;
using namespace std;
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(5, 5));
// 腐蚀膨胀操作
cv::dilate(segDst, dilDst, element);
cv::imshow(" srcGray ", srcGray);
cv::imshow(" segDst ", segDst);
cv::imshow(" dilDst ", dilDst);
cv::waitKey();
return 0;
}
实现效果
其他:
更多专栏订阅:
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。