• OpenCV实现图像的礼帽和黑帽


    图像的礼帽(Top Hat)和黑帽(Black Hat)变换是数学形态学图像处理中的两个重要操作。它们用于检测图像中的局部亮度变化和暗度变化,常用于图像增强和物体识别等应用。在本文中,我们将详细介绍礼帽和黑帽变换的原理以及在OpenCV中的实现。
    形态学图像处理的基础

    形态学图像处理是一种基于形状和结构的图像处理方法,通常用于处理二值图像(包括二进制和灰度图像)。形态学操作基于结构元素(也称为核或窗口),这是一个小的图像或卷积核,用于在输入图像上滑动以执行各种操作。

    形态学操作中最基本的两个操作是腐蚀(Erosion)和膨胀(Dilation)。腐蚀用于缩小图像中的物体,而膨胀用于扩大物体。礼帽和黑帽变换都基于这些基本操作,并添加了额外的步骤来检测亮度和暗度变化。
    礼帽变换

    礼帽变换是通过执行以下步骤来检测图像中的亮度变化:

    先对输入图像执行腐蚀操作,通常使用结构元素滑动在图像上,将核与图像的局部区域进行比较,找到局部最小像素值。
    然后,将原始图像减去腐蚀操作的结果。这将突出亮度增加的区域,即亮度比周围更高的区域。
    
    • 1
    • 2

    礼帽变换通常用于检测图像中的小亮斑点或小亮物体。在OpenCV中,可以使用cv2.morphologyEx函数来执行礼帽变换。
    黑帽变换

    黑帽变换与礼帽变换相反,它用于检测图像中的暗度变化。黑帽变换的步骤如下:

    先对输入图像执行膨胀操作,找到局部最大像素值。
    然后,将膨胀操作的结果减去原始图像。这将突出暗度增加的区域,即比周围更暗的区域。
    
    • 1
    • 2

    黑帽变换通常用于检测图像中的小暗斑点或小暗物体。在OpenCV中,也可以使用cv2.morphologyEx函数来执行黑帽变换。
    应用和用途

    礼帽和黑帽变换在图像处理中有多种应用,包括但不限于:

    背景减除:用于分离前景物体和背景,检测移动物体或跟踪对象。
    文本检测:用于检测图像中的文本区域,特别是在复杂背景下。
    纹理分析:用于分析纹理特征,如检测图像中的纹理缺陷或特征。
    医学图像分析:在医学影像中,用于检测和分析病变、血管、斑点等。
    图像增强:用于增强图像中的局部细节,使其更容易分析和识别。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    礼帽和黑帽变换的选择取决于具体的应用场景和所需的目标。例如,在文本检测中,黑帽变换可能用于检测文本的边缘,而礼帽变换可能用于突出文本的光亮区域。在背景减除中,礼帽和黑帽变换可以用于检测前景对象和背景之间的亮度和暗度变化。

    总之,礼帽和黑帽变换是形态学图像处理的重要工具,用于检测和突出图像中的亮度和暗度变化。这些操作可用于多种图像处理任务,帮助改进图像分析、物体检测和图像增强等应用。根据具体的需求和应用场景,选择适当的变换可以显著提高图像处理的效果。

    礼帽运算

    在这里插入图片描述

    黑帽运算

    在这里插入图片描述

    参数

    cv.morphologyEx(img,op,kernel)
    
    • 1

    参数:

    • img : 要处理的图像
    • op: 处理方式

    在这里插入图片描述

    代码实现

    import numpy as np
    import cv2 as cv
    import matplotlib.pyplot as plt
    from pylab import mpl
    
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    
    #读取图像
    
    img1 = cv.imread("lena.png")
    
    
    #创建核结构
    kernel = np.ones((10,10),np.uint8)
    
    #图像礼帽核黑帽运算
    cvopen = cv.morphologyEx(img1,cv.MORPH_TOPHAT,kernel)   #礼帽运算
    
    cvclose = cv.morphologyEx(img1,cv.MORPH_BLACKHAT,kernel)   #黑帽运算
    
    #图像显示
    fig,axes = plt.subplots(nrows=2,ncols=2,figsize=(6,6),dpi=100)
    
    '''在代码axes[0, 0]和axes[0, 1]中,[0, 0]和[0, 1]表示子图的位置。
    
    axes[0, 0]表示第一行第一列的子图,axes[0, 1]表示第一行第二列的子图。
    
    子图的位置索引是从左上角开始计数,第一行为0,第一列也为0。因此,[0, 0]代表左上角的子图,[0, 1]代表右上角的子图。
    
    在代码中,通过imshow()方法显示图像,再通过set_title()方法设置子图的标题,以便更好地标识每个子图所代表的内容。
    '''
    
    
    axes[0,0].imshow(img1[:,:,::-1])
    axes[0,0].set_title("原图")
    
    axes[0,1].imshow(cvopen[:,:,::-1])
    axes[0,1].set_title("顶帽")
    
    axes[1,0].imshow(cvclose[:,:,::-1])
    axes[1,0].set_title("礼帽")
    
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    运行结果展示

    在这里插入图片描述

    总结:

    顶帽和礼帽是形态学图像处理中的两种操作,它们都是基于图像的开运算和闭运算来实现的。

    顶帽(Top Hat)操作:
    顶帽操作可以通过先对原图像进行腐蚀操作,再用原图像减去腐蚀后的结果得到。顶帽操作可以提取出比原图像亮且尺寸较小的细节或者噪声。
    顶帽操作的效果是突出原图像中边缘、细节和亮点。它通常用于增强图像中的细微结构或者检测图像中的小尺度目标。

    礼帽(Black Hat)操作:
    礼帽操作是先对原图像进行膨胀操作,再用膨胀后的结果减去原图像得到。礼帽操作可以提取出比原图像暗且尺寸较小的细节或者噪声。

    礼帽操作的效果是突出原图像中的边缘、细节和暗点。它通常用于增强图像中的细微结构或者检测图像中的小尺度目标。

    综上所述,顶帽操作用于突出图像中的亮细节,而礼帽操作用于突出图像中的暗细节。这两种操作都可以帮助我们提取和强调图像中细小而重要的特征。

  • 相关阅读:
    扬州大学858程序设计与数据结构专业课(资料篇)
    Java.lang.Class类 getTypeParameters()方法有什么功能呢?
    docker 命令 相关
    Linux编译器——gcc/g++的使用
    网页设计与制作项目三“网上花店”
    实验七 循环神经网络(3)LSTM的记忆能力实验
    网鼎杯网络安全大赛玄武组_经典的一道CTF-WriteUP-SSRFME
    Group DETR
    MySQL---DML语句对数据进行增删改操作
    【python基础学习3】jupyter notebook 相关技巧学习
  • 原文地址:https://blog.csdn.net/qq_53545309/article/details/133179304