开运算是图像形态学处理中的一种操作,它由两个步骤组成:先进行腐蚀(Erosion),再进行膨胀(Dilation)。开运算的主要目的是消除图像中的小型噪点(白色噪点对应的是小型黑色区域,黑色噪点对应的是小型白色区域),同时保留图像中大型物体的结构特征。
给定输入图像 I I I、结构元素 B B B,开运算可以用数学表达式表示为:
Opening ( I , B ) = Dilation ( Erosion ( I , B ) , B ) \text{Opening}(I, B) = \text{Dilation}(\text{Erosion}(I, B), B) Opening(I,B)=Dilation(Erosion(I,B),B)
其中, Erosion ( I , B ) \text{Erosion}(I, B) Erosion(I,B) 表示输入图像 I I I被结构元素 B B B腐蚀的结果, Dilation ( ⋅ ) \text{Dilation}(\cdot) Dilation(⋅) 表示膨胀操作。
以下是使用 OpenCV 和 Python 进行开运算的简单示例:
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 Open(image):
# 定义结构元素(可以自定义不同形状和大小的结构元素)
kernel = np.ones((5, 5), np.uint8) # 5x5 的全白正方形作为结构元素
# 进行开运算
opened_image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
return opened_image
if __name__ == '__main__':
# 读取图像
img = cv2.imread('cat-dog.png', flags=0)
re_img=Open(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)