【OpenCV C++20 学习笔记】腐蚀和膨胀

腐蚀和膨胀

形态学原理

腐蚀和膨胀通常有以下用途:

  • 去除噪音
  • 分离或合并图像中的元素
  • 找出图片上的强度的极大值区域和极小值区域
    以下图作为原始图片:

膨胀

用核 B B B来扫描图像 A A A,核 B B B中有个锚点,通常是核的中心。在扫描图像的时候,被 B B B覆盖的 A A A的区域上的最大值将会被赋予核 B B B的锚点。这样图片中像素值高的区域(亮的区域)将会扩大,这就是"膨胀"。如下图所示:

用数学公式来表达就是:
d s t ( x , y ) = m a x ( x ′ , y ′ ) : e l e m e n t ( x ′ , y ′ ) ≠ 0 s r c ( x + x ′ , y + y ′ ) dst(x,y)=max_{(x', y'):element(x',y')\neq0}src(x+x',y+y') dst(x,y)=max(x′,y′):element(x′,y′)=0src(x+x′,y+y′)

  • d s t ( x , y ) dst(x,y) dst(x,y)为 x x x行 y y y列的像素值的膨胀结果
  • s r c ( x , y ) src(x,y) src(x,y)为 x x x行 y y y列的原始像素值
  • x ′ x' x′和 y ′ y' y′分别为最大值在核中的坐标

膨胀后的效果:

腐蚀

腐蚀的操作与膨胀正好相反,它将核 B B B中的最小值赋予核的锚点。这样像素值小的区域(暗的区域)就会变多。如下图所示:

用数学公式表达如下:
d s t ( x , y ) = m i n ( x ′ , y ′ ) : e l e m e n t ( x ′ , y ′ ) ≠ 0 s r c ( x + x ′ , y + y ′ ) dst(x,y)=min_{(x', y'):element(x',y')\neq0}src(x+x',y+y') dst(x,y)=min(x′,y′):element(x′,y′)=0src(x+x′,y+y′)

  • d s t ( x , y ) dst(x,y) dst(x,y)为 x x x行 y y y列的像素值的膨胀结果
  • s r c ( x , y ) src(x,y) src(x,y)为 x x x行 y y y列的原始像素值
  • x ′ x' x′和 y ′ y' y′分别为最大值在核中的坐标

腐蚀效果如下:

代码实现

在OpenCV中,在进行膨胀和腐蚀操作前都必须先创建用来扫描原始图片的"核",这就要用到getStructuringElement()函数:

cpp 复制代码
Mat element = getStructuringElement(MORPH_RECT,		//核的形态
									Size(3, 3),		//核的尺寸,默认3*3
									Point(-1, -1));	//核的锚点,(-1,-1)表示核的中心

其中第1个参数,有以下枚举类型:

  • MORPH_RECT:矩形
  • MORPH_CROSS:十字形
  • MORPH_ELLIPSE:椭圆形

这样就会自动创建全是1的一个卷积核矩阵,如下图:

接下来就可以进行膨胀和腐蚀操作了:

膨胀函数

膨胀函数非常简单:

cpp 复制代码
dilate(image,	//原图
	DImage,		//目标图
	element);	//核

腐蚀函数

腐蚀函数也非常简单:

cpp 复制代码
erode(image,	//原图
	EImage,		//目标图
	element);	//核

运行结果

中间是原图,左边是膨胀,右边是腐蚀:

相关推荐
通信小呆呆4 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick4 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee4 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e4 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨4 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙
梦想三三4 天前
OpenCV银行卡数字识别项目(图像预处理与字符分割)
人工智能·opencv·计算机视觉
cqbzcsq4 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
YangYang9YangYan4 天前
2026初入职场学习数据分析的价值
学习·数据挖掘·数据分析
guslegend4 天前
理论学习:什么是 Coding Agent?
学习