Bootstrap

【去毛刺】OpenCV图像处理基础:腐蚀与膨胀操作入门

在数字图像处理中,形态学操作是一种常用的技术,用于提取图像中的特定形状或特征。其中,腐蚀(Erosion)和膨胀(Dilation)是两种基本的形态学运算。本文将通过一个简单的例子来演示如何使用Python中的OpenCV库执行这些操作,并展示其效果。

1. 环境准备

首先确保已经安装了opencv-python库。如果尚未安装,可以通过pip命令进行安装:

pip install opencv-python

此外,还需要NumPy库来进行数组操作,通常安装OpenCV时会自动安装此库,但也可以单独安装:

pip install numpy
2. 加载图像

开始之前,我们需要加载一张待处理的图片。这里使用的是路径F:/2024/Python/demo1/test1/ty.png下的图像文件。

import cv2
import numpy as np

# 读取图像
img = cv2.imread('F:/2024/Python/demo1/test1/ty.png')
cv2.imshow('Original Image', img)  # 显示原始图像
3. 腐蚀操作

腐蚀是一种可以去除物体边界点的操作,它能够缩小前景区域。我们定义了一个3x3大小的结构元素(kernel),并使用cv2.erode()函数对图像执行一次腐蚀操作。

f_with = 3  # 定义腐蚀核的宽度
kernel = np.ones((f_with, f_with), np.uint8)  # 创建一个3x3的全1矩阵作为核
img_eroded = cv2.erode(img, kernel, iterations=1)  # 对图像进行腐蚀
cv2.imshow('Eroded Image1', img_eroded)  # 显示腐蚀后的图像
4. 膨胀操作

膨胀则是腐蚀的逆过程,它可以增加前景区域的大小。同样地,我们利用相同的核对经过腐蚀处理后的图像进行膨胀操作。

# 第一次膨胀
img_dilated = cv2.dilate(img_eroded, kernel, iterations=1)
cv2.imshow("dilate image1", img_dilated)

# 第二次膨胀
img_dilated = cv2.dilate(img_eroded, kernel, iterations=2)
cv2.imshow("dilate image2", img_dilated)

 完整代码

import cv2
import numpy as np
img = cv2.imread('F:/2024/Python/demo1/test1/ty.png')



cv2.imshow('Original Image', img) 


# 腐蚀操作
f_with = 3  # 腐蚀操作的宽度
kernel = np.ones((f_with, f_with), np.uint8)  # 定义一个5x5的结构元素
img_eroded = cv2.erode(img, kernel, iterations=1)  # 进行腐蚀操作

cv2.imshow('Eroded Image1', img_eroded)  # 显示腐蚀处理后的图片

# 膨胀操作
 
kernel = np.ones((f_with, f_with), np.uint8)  # 定义一个5x5的结构元素
img_dilated = cv2.dilate(img_eroded, kernel, iterations=1)  # 进行膨胀操作
cv2.imshow("dilate image1",img_dilated)

img_dilated = cv2.dilate(img_eroded, kernel, iterations=2)  # 进行膨胀操作
cv2.imshow("dilate image2",img_dilated)

cv2.waitKey(0)            # 等待按键
cv2.destroyAllWindows()   # 关闭所有窗口
5. 结果展示

运行上述代码后,你将看到原始图像、腐蚀后的图像以及两次不同迭代次数膨胀后的结果。这有助于理解腐蚀与膨胀是如何改变图像边界的。

6. 结论

通过这个简单的实例,我们可以观察到腐蚀和膨胀对于图像边缘的影响。它们不仅可用于噪声去除,还可以帮助识别和增强图像中的特定特征。尝试调整核的大小和迭代次数,探索更多可能性!

最后不要忘记关闭所有打开的窗口以清理资源:

cv2.waitKey(0)
cv2.destroyAllWindows()

希望这篇文章能为你提供一些关于如何使用OpenCV进行基本图像处理的见解。继续探索更多高级功能吧!

;