目录
1. 简述
2. 用膨胀和腐蚀实现闭运算
2.1 代码示例
2.2 运行结果
3. 闭运算接口
3.1 参数详解
3.2 代码示例
3.3 运行结果
4. 闭运算的应用场景
5. 注意事项
相关阅读
OpenCV:图像的腐蚀与膨胀-CSDN博客
OpenCV:开运算-CSDN博客
1. 简述
简而言之:闭运算 = 膨胀 + 腐蚀
闭运算是一种形态学操作,用于填补前景物体中的小孔洞、连接断裂部分以及平滑前景边缘。
它的操作顺序是:
- 膨胀:先扩展前景物体,使前景变大。
- 腐蚀:再缩小前景物体,恢复形状。
闭运算的作用可以概括为:
- 填补前景中的小空隙。
- 连接相近的前景区域。
- 平滑边界。
数学表达式为:
其中:
- A 是输入图像。
- B 是卷积核。
- ⊕ 表示膨胀操作。
- ⊖ 表示腐蚀操作。
2. 用膨胀和腐蚀实现闭运算
2.1 代码示例
import cv2
import numpy as npimage = cv2.imread('D:\\resource\\filter\\q4.jpg')# 卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))# 膨胀操作
result1 = cv2.dilate(image, kernel, iterations=1)# 腐蚀操作
result2 = cv2.erode(result1, kernel, iterations=1)# 显示原始图像、闭运算(膨胀 + 腐蚀)图像
cv2.imshow('image', image)
cv2.imshow('result2', result2)cv2.waitKey(0)
cv2.destroyAllWindows()
2.2 运行结果
从左到右:
- 原始黑底白字图像,白字内部带一些黑色的噪点。
- 图像进行膨胀、腐蚀之后的结果,内部黑色噪点消失。
3. 闭运算接口
在 OpenCV 中,闭运算由函数 cv2.morphologyEx() 实现,其关键参数如下:
cv2.morphologyEx(src, op, kernel, dst=None, anchor=(-1, -1), iterations=1, borderType=cv2.BORDER_CONSTANT, borderValue=0)
3.1 参数详解
- src:输入图像。通常是二值化图像或灰度图像。
- op:操作类型,闭运算的标识符为 cv2.MORPH_CLOSE。
- kernel:结构元素(卷积核),决定形态学操作的范围和形状。
- dst:输出图像。默认为 None。
- anchor:结构元素的锚点,默认为 (-1, -1),即以核的中心为锚点。
- iterations:操作的迭代次数,默认为 1。
- borderType:边界模式,定义图像边界的填充方式,常用 cv2.BORDER_CONSTANT。
- borderValue:边界值,仅在 borderType 为 cv2.BORDER_CONSTANT 时使用。
常用的参数为前3个:
cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
3.2 代码示例
import cv2
import numpy as npimage = cv2.imread('D:\\resource\\filter\\q4.jpg')# 卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))# 膨胀操作
#result1 = cv2.dilate(image, kernel, iterations=1)# 腐蚀操作
#result2 = cv2.erode(result1, kernel, iterations=1)# 闭运算
result2 = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)# 显示原始图像、闭运算(膨胀 + 腐蚀)图像
cv2.imshow('image', image)
cv2.imshow('result2', result2)cv2.waitKey(0)
cv2.destroyAllWindows()
3.3 运行结果
4. 闭运算的应用场景
- 填补前景中的小孔洞:闭运算可以有效填补前景区域中的小空洞,从而使目标更加完整。
- 连接断裂的前景区域:当前景物体存在细小的断裂区域时,闭运算可以将其连接起来。
- 平滑前景边界:通过闭运算,前景的边界可以变得更加平滑,去除不必要的凹陷。
5. 注意事项
- 核的大小:选择适当的核大小尤为重要,过大或过小的核可能会导致处理效果不佳。
- 输入图像类型:通常对二值化图像进行闭运算效果更明显。
- 迭代次数:可以通过调整迭代次数来进一步增强效果。