您现在的位置是:首页 >技术教程 >day14 - 提取图像信息网站首页技术教程

day14 - 提取图像信息

九灵猴君 2024-06-26 00:01:02
简介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                            # 储存数据文件

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

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()

请添加图片描述

处理前后对比

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

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()

请添加图片描述

处理前后对比

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

点击下载源码

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。