闭运算(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 npdef 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 closingif __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)