形态学操作—闭运算
闭运算(Closing)是图像形态学中的一种操作,它结合了膨胀(Dilation)和腐蚀(Erosion)操作。闭运算的原理是先对图像执行腐蚀操作,然后再进行膨胀操作。这个过程能够消除图像中的小孔洞,填充小的断裂,平滑物体的边界,以及连接窄的间隙。
作用:
- 填补小的空洞或断裂
- 平滑和关闭物体的边界
- 连接紧密但不连续的物体部分
适用场景:
- 图像预处理中的去噪声和平滑
- 图像分割中的物体连接和边界提取
- 图像分析中的前景提取和形状识别
数学公式:
闭运算可以用数学形式表示为:
Closing
(
A
,
B
)
=
(
A
⊖
B
)
⊕
B
\text{Closing}(A, B) = (A \ominus B) \oplus B
Closing(A,B)=(A⊖B)⊕B
其中,
A
A
A 是输入图像,
B
B
B 是结构元素,
⊖
\ominus
⊖表示腐蚀操作,
⊕
\oplus
⊕ 表示膨胀操作。
代码示例:
import cv2
import numpy as np
def show_images(image):
cv2.namedWindow('image',cv2.WINDOW_KEEPRATIO)
cv2.imshow('image',image)
cv2.waitKey()
cv2.destroyAllWindows()
def Close(image):
# 定义结构元素(这里使用一个5x5的正方形结构元素)
kernel = np.ones((5, 5), np.uint8)
# 执行闭运算
closing = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
return closing
if __name__ == '__main__':
# 读取图像
img = cv2.imread('cat-dog.png', flags=0)
re_img=Close(img)
# # 将四张图像连接成一个大图像
# top_row = np.hstack((img, re_img[0]))
# bottom_row = np.hstack((re_img[1], re_img[2]))
# combined_img = np.vstack((img, re_img))
combined_img=np.hstack((img,re_img))
show_images(combined_img)