Python+OpenCV:形态学变换

82 篇文章 20 订阅
本文深入探讨了Python结合OpenCV进行形态学变换的理论与实践。形态学变换主要应用于二值图像,涉及的基本操作包括腐蚀和膨胀,以及它们的派生形式如开运算、闭运算、梯度和顶帽、黑帽等。通过不同形状的结构元素,可以有效地改变图像的轮廓和特征,对于图像处理和分析具有重要意义。
摘要由CSDN通过智能技术生成

Python+OpenCV:形态学变换

理论

形态学变换是基于图像形状的一些简单操作。

它通常在二值图像上执行。它需要两个输入,一个是我们的原始图像,另一个是结构元素(structuring element)核(kernel),它决定了操作的性质。

两个基本的形态算子是Erosion和Dilation。然后它的变体形式,如Opening, Closing, Gradient等也发挥作用。

####################################################################################################
# 形态学变换
def lmc_cv_morphological_transformations(index):
    """
        函数功能: 形态学变换.
        形态学变换是基于图像形状的一些简单操作。
        它通常在二值图像上执行。它需要两个输入,一个是我们的原始图像,另一个是结构元素(structuring element)或核(kernel),它决定了操作的性质。
        两个基本的形态算子是Erosion和Dilation。然后它的变体形式,如Opening, Closing, Gradient等也发挥作用。
    """

    # 读取图像
    image = lmc_cv.imread('D:/99-Research/Python/Image/j.png')
    # image = lmc_cv.cvtColor(image, lmc_cv.COLOR_RGB2BGR)

    # 创建核
    kernel = np.ones((9, 9), np.uint8)

    # 创建核:Rectangular Kernel
    if 0 == index:
        kernel = lmc_cv.getStructuringElement(lmc_cv.MORPH_RECT, (3, 3))

    # 创建核:Elliptical Kernel
    if 1 == index:
        kernel = lmc_cv.getStructuringElement(lmc_cv.MORPH_ELLIPSE, (5, 5))

    # 创建核:Cross-shaped Kernel
    if 2 == index:
        kernel = lmc_cv.getStructuringElement(lmc_cv.MORPH_CROSS, (7, 7))

    # Erosion
    erosion_image = lmc_cv.erode(image, kernel, anchor=(-1, -1), iterations=1, borderType=lmc_cv.BORDER_DEFAULT)

    # Dilation
    dilation_image = lmc_cv.dilate(image, kernel, anchor=(-1, -1), iterations=1, borderType=lmc_cv.BORDER_DEFAULT)

    # Opening
    opening_image = lmc_cv.morphologyEx(image, lmc_cv.MORPH_OPEN, kernel, anchor=(-1, -1), iterations=1,
                                        borderType=lmc_cv.BORDER_DEFAULT)

    # Closing
    closing_image = lmc_cv.morphologyEx(image, lmc_cv.MORPH_CLOSE, kernel, anchor=(-1, -1), iterations=1,
                                        borderType=lmc_cv.BORDER_DEFAULT)

    # Morphological Gradient
    gradient_image = lmc_cv.morphologyEx(image, lmc_cv.MORPH_GRADIENT, kernel, anchor=(-1, -1), iterations=1,
                                         borderType=lmc_cv.BORDER_DEFAULT)

    # Top Hat
    tophat_image = lmc_cv.morphologyEx(image, lmc_cv.MORPH_TOPHAT, kernel, anchor=(-1, -1), iterations=1,
                                       borderType=lmc_cv.BORDER_DEFAULT)

    # Black Hat
    blackhat_image = lmc_cv.morphologyEx(image, lmc_cv.MORPH_BLACKHAT, kernel, anchor=(-1, -1), iterations=1,
                                         borderType=lmc_cv.BORDER_DEFAULT)

    # 显示图像
    pyplot.figure('Image Display')
    images = [image, erosion_image, dilation_image, opening_image, closing_image, gradient_image, tophat_image,
              blackhat_image]
    titles = ['Original', 'Erosion', 'Dilation', 'Opening', 'Closing', "Morphological Gradient", 'Top Hat', 'Black Hat']
    for i in range(8):
        pyplot.subplot(2, 4, i + 1)
        pyplot.imshow(images[i], 'gray')
        pyplot.title(titles[i])
        pyplot.xticks([])
        pyplot.yticks([])
    pyplot.show()

    # 根据用户输入保存图像
    if ord("q") == (lmc_cv.waitKey(0) & 0xFF):
        # 销毁窗口
        pyplot.close()
    return

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值