目录
1. 简述
2. 用腐蚀和膨胀实现开运算
2.1 代码示例
2.2 运行结果
3. 开运算接口
3.1 参数详解
3.2 代码示例
3.3 运行结果
4. 开运算应用场景
5. 注意事项
6. 总结
相关阅读
OpenCV:图像的腐蚀与膨胀-CSDN博客
OpenCV:闭运算-CSDN博客
1. 简述
简而言之:开运算 = 腐蚀 + 膨胀
开运算 是一种形态学操作,通常用于去除图像中的小噪点,同时保留较大的前景物体。
它的操作顺序是:
- 先对图像进行 腐蚀,去除细小的噪点和瑕疵。
- 再进行 膨胀,恢复被腐蚀的前景物体形状。
开运算的主要作用是:
- 去除噪声(尤其是白色背景下的黑色小物体)。
- 平滑前景物体的边缘。
开运算的数学表达式为:
其中:
- A 是输入图像。
- B 是卷积核。
- ⊖ 表示腐蚀操作。
- ⊕ 表示膨胀操作。
2. 用腐蚀和膨胀实现开运算
2.1 代码示例
import cv2
import numpy as np
image = cv2.imread('D:\\resource\\filter\\q3.jpg')
# 卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
# 腐蚀操作
result1 = cv2.erode(image, kernel, iterations=1)
# 膨胀操作
result2 = cv2.dilate(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_OPEN。
- kernel:结构元素(卷积核)。决定形态学操作的邻域范围和形状。可以使用 cv2.getStructuringElement() 创建。
- dst:输出图像。默认为 None。
- anchor:结构元素的锚点,默认为 (-1, -1),即以核的中心为锚点。
- iterations:操作的迭代次数,默认为 1。
- borderType:边界模式,定义图像边界的填充方式,常用 cv2.BORDER_CONSTANT。
- borderValue:边界值,仅在 borderType 为 cv2.BORDER_CONSTANT 时使用。
常用的参数为前3个:
cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
3.2 代码示例
import cv2
import numpy as np
image = cv2.imread('D:\\resource\\filter\\q3.jpg')
# 卷积核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
# 腐蚀操作
#result1 = cv2.erode(image, kernel, iterations=1)
# 膨胀操作
#result2 = cv2.dilate(result1, kernel, iterations=1)
# 开运算
result2 = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
# 显示原始图像、开运算(腐蚀 + 膨胀)图像
cv2.imshow('image', image)
cv2.imshow('result2', result2)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.3 运行结果
结果与2.2一致。
4. 开运算应用场景
- 去除小噪点:在二值化图像中,小的孤立噪声点可以通过开运算清除。
- 提取连通区域:对于连通区域的检测,开运算可以去掉孤立的小物体,仅保留目标区域。
- 平滑边缘:通过开运算,前景物体的边缘可以更加平滑。
5. 注意事项
- 核的大小与形状:卷积核的大小直接影响结果。核过大会过度去除图像细节,核过小则可能无法有效去除噪声。
- 输入图像类型:开运算适用于二值化或灰度图像,对于彩色图像需先转换。
- 多次操作:对于复杂噪声,可能需要多次开运算,或调整核的大小与形状。
6. 总结
开运算是图像形态学中的基本操作,用于去除小噪点、平滑边缘等。OpenCV 提供了功能强大的接口 cv2.morphologyEx(),可以灵活实现开运算及其他形态学操作。通过选择合适的卷积核,可以在实际项目中轻松应对各种图像处理问题。