• day14 - 提取图像信息


    本期主要介绍图像的礼帽运算和黑帽运算,礼帽运算常用于获取原始图像的噪声信息,或者得到比原始图像的边缘更亮的边缘信息;黑帽运算常用来检测图像中的波谷结构,分离比邻近点暗一些的斑块,比如得到轮廓效果图。

    完成本期内容,你可以:

    • 了解图像礼帽运算的原理和应用

    • 了解图像黑帽运算的原理和应用

    • 学会使用礼帽运算进行图像处理

    • 学会使用黑帽运算进行图像处理

    若要运行案例代码,你需要有:

    • 操作系统:Ubuntu 16 以上 或者 Windows10

    • 工具软件:VScode 或者其他源码编辑器

    • 硬件环境:无特殊要求

    • 核心库:python 3.6.13, opencv-contrib-python 3.4.11.39,opencv-python 3.4.2.16

    点击下载源码


    礼帽运算

    礼帽运算,也称顶帽运算或高帽运算,是用原始图像减去其开运算图像的操作。礼帽运算获取原始图像的噪声信息,或者得到比原始图像的边缘更亮的边缘信息,比如得到前景图外面的毛刺噪声。

    礼帽图像=原始图像-开运算图像=原始图像-(原始图像先腐蚀再膨胀)

    • 首先读取图像
    • 进行图像开运算操作
    • 原始图像减去开运算图像,得到相减后的图像,获得礼帽运算图像的结果

    黑帽运算

    黑帽运算是用其闭运算图像减去原始图像的操作。黑帽运算获取图像内部的小孔,或前景图像的小黑点,或得到比原始图像的边缘更暗的边缘部分。黑帽运算常用来检测图像中的波谷结构,分离比邻近点暗一些的斑块,比如得到轮廓效果图。

    黑帽图像=闭运算图像-原始图像=(原始图像先膨胀后腐蚀)-原始图像

    • 首先读取图像
    • 进行图像闭运算操作
    • 闭运算图像减去原始图像,得到相减后的图像,获得黑帽运算图像的结果

    形态学方法

    • OpenCV将形态学方法封装成了cv2.morphologyEx()方法。

      函数原型:dst = cv2.morphologyEx(src, op, kernel, anchor, iterations, borderType, borderValue)
      dst为输出图像。

      参数描述如下:

      • src:被处理的图像
      • kernel:操作中使用的核
      • anchor:可选参数,核锚点的位置
      • iterations:可选参数,迭代次数,默认值为1
      • borderType:可选参数,边界样式,建议采用默认值
      • borderValue:可选参数,边界值,建议采用默认值
      • op:操作类型
      参数值含义
      cv2.MORPH_ERODE腐蚀操作
      cv2.MORPH_DILATE膨胀操作
      cv2.MORPH_OPEN开运算,先腐蚀后膨胀
      cv2.MORPH_CLOSE闭运算,先膨胀后腐蚀
      cv2.MORPH_GRADIENT梯度运算,膨胀图减腐蚀图,可以得到简易的轮廓
      cv2.MORPH_TOPHAT顶帽运算,原始图像减开运算图像
      cv2.MORPH_BLACKHAT黑帽运算,闭运算图像减原始图像

    具体步骤

    1. 创建项目结构

    创建项目名为提取图像信息,项目根目录下新建code文件夹储存代码,新建dataset文件夹储存数据,项目结构如下:

    提取图像信息                             # 项目名称
    ├── code                               # 储存代码文件
    ├── dataset                            # 储存数据文件
    
    • 1
    • 2
    • 3

    注:如项目结构已存在,无需再创建。

    2. 使用图像礼帽运算进行图像处理

    1. code文件夹下创建tophat.py文件;
    2. 导入所需的库,OpenCV、numpy ;
    3. 读取dataset文件夹下的ursa_minor.png图片,并进行展示 ;
    4. 设置一个7 *7 的值都为1 的核;
    5. 使用礼帽运算进行图像处理,并展示结果;

    代码实现

    # 导入OpenCV、numpy
    import cv2
    import numpy as np
    o=cv2.imread("../dataset/ursa_minor.png")#原始图像
    k=np.ones((7,7),np.uint8)#设置核kernel
    r=cv2.morphologyEx(o,cv2.MORPH_TOPHAT,k)#礼帽运算
    cv2.imshow("original",o)
    cv2.imshow("tophat",r)
    cv2.waitKey()
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    请添加图片描述

    处理前后对比

    图像开运算操作放大了裂缝或者局部降低亮度的区域,礼帽运算常用来分离比邻近点亮一些的斑块。在一幅图像具有大幅的背景且微小物品比较有规律的情况下,使用礼帽运算达到背景提取,使得线条更加突出的目的。

    3. 使用图像黑帽运算进行图像处理

    1. code文件夹下创建blackhat.py文件;
    2. 导入所需的库,OpenCV、numpy ;
    3. 读取dataset文件夹下的ursa_minor.png图片,并进行展示 ;
    4. 设置一个7 *7 的值都为1 的核;
    5. 使用黑帽运算进行图像处理,并展示结果;

    代码实现

    # 导入OpenCV、numpy
    import cv2
    import numpy as np
    o=cv2.imread("../dataset/ursa_minor.png")#原始图像
    k=np.ones((7,7),np.uint8)#设置核kernel
    r=cv2.morphologyEx(o,cv2.MORPH_BLACKHAT,k)#黑帽运算
    cv2.imshow("original",o)
    cv2.imshow("balckhat",r)
    cv2.waitKey()
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    请添加图片描述

    处理前后对比

    本小节主要介绍了礼帽运算和黑帽运算。通过两种运算对同一张图像进行处理,强化大家对礼帽运算和黑帽运算的理解,礼帽运算主要用于分离比邻近点亮一些的斑块,在一幅大图像具有大幅的背景,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。 而黑帽运算常用于分离比邻近点暗一些的斑块。

    点击下载源码

  • 相关阅读:
    【数据结构与算法】LinkedList与链表(下)
    【博客435】Kubernetes集群中,Node异常时Pod状态分析
    【博客474】为什么k8s控制面pod使用的ip是node ip,而非pod cidr中的ip
    拒绝加班:巧用前端电子表格中构建公式树
    需求变化频繁的情况下,如何实施自动化测试
    卷积神经网络的发展历史-VGG
    我的个人网站,终于上线了!
    springcloud入门
    Vue2项目知识点总结-尚品汇
    html资源提示符
  • 原文地址:https://blog.csdn.net/qq_40186237/article/details/130860366