形态学操作—开运算

开运算(Opening)原理和作用:

  开运算是图像形态学处理中的一种操作,它由两个步骤组成:先进行腐蚀(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)

你可能感兴趣的:(opencv_python,opencv,python)