OpenCV图像腐蚀与膨胀原理及Python实现

Mason
Mason
发布时间:2026-10-15| 3人浏览过
原创

本文详解OpenCV中图像腐蚀与膨胀的原理及Python实现。通过卷积核遍历二值图像,腐蚀操作需所有像素为1才保留,用于去噪;膨胀操作只要有一个为1即保留,用于恢复形状。文章提供cv2.erode和cv2.dilate函数用法、参数设置及完整代码示例。

OpenCV图像腐蚀与膨胀原理及Python实现

本文使用的编程语言为Python,并依赖OpenCV库进行图像处理。

图像腐蚀与膨胀的应用场景

探讨为何需要引入图像腐蚀和图像膨胀这两种基础形态学操作。

如示意图所示,单独使用图像腐蚀可以有效去除图像中的噪声点,但这一过程往往会导致物体边缘收缩,从而压缩了原始物体的尺寸。为了在去除噪声的同时保持原有物体的形状和大小,通常会对腐蚀后的图像进一步进行膨胀处理。这种组合操作既能有效清除噪声,又能较好地保留原始图像的几何特征。

图像腐蚀操作详解

图像腐蚀是形态学处理的基础操作之一。

图像腐蚀主要应用于二值图像,即图像像素值仅包含0和1两种情况。该操作需要两个输入对象:原始二值图像和卷积核(也称为结构元素)。处理过程是利用卷积核在原始图像上滑动遍历,只有当卷积核覆盖的所有对应像素值均为1时,输出图像中该位置的值才为1;否则,输出值为0。如图所示,红色区域代表卷积核的形状和大小。


腐蚀操作后的效果示意图显示,图像的边缘部分会被向内收缩,即抹掉一部分边缘像素,从而实现去噪或缩小物体的效果。


在OpenCV中,实现图像腐蚀的函数名为erode,中文含义为“侵蚀”。

调用该函数的基本语法格式为:处理结果 = cv2.erode(原始图像src, 卷积核kernel, 迭代次数iterations)。

卷积核kernel通常是一个正方形数组,用于定义腐蚀操作的形状和大小。

例如,可以使用NumPy创建一个5x5的全1数组作为卷积核:k=np.ones((5,5),np.uint8)。

迭代次数iterations指定腐蚀操作的重复次数,默认值为1。增加迭代次数会增强腐蚀效果,使物体缩小得更明显。


import cv2
import numpy as np
o=cv2.imread("erode.bmp",cv2.IMREAD_UNCHANGED)
k=np.ones((5,5),np.uint8)
r=cv2.erode(o,k,iterations=10)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

图像膨胀操作详解

图像膨胀是图像腐蚀的逆操作,常用于填补空洞或连接断开的区域。

图像膨胀同样针对二值图像进行处理。其输入参数包括二值图像和卷积核。


在处理过程中,使用卷积核对二值图像进行遍历。与腐蚀不同,只要卷积核覆盖的像素点中有一个为1,输出图像中对应位置的值即为1;否则为0。这种操作会使物体边缘向外扩张。


在OpenCV中,实现图像膨胀的函数名为dilate。调用格式为:结果 = cv2.dilate(二值图像src, 卷积核k, 迭代次数iterations)。其中,卷积核同样通常为正方形数组,例如np.ones((5,5),np.uint8)。


import cv2
import numpy as np
o=cv2.imread("dilation.bmp",cv2.IMREAD_UNCHANGED)
k=np.ones((5,5),np.uint8)
r=cv2.dilate(o,k,iterations=1)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()


至此,关于OpenCV中图像腐蚀和图像膨胀的实现原理及代码示例已介绍完毕。如需了解更多相关内容,建议搜索本站过往文章或继续阅读后续系列教程,感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。