day14 - 提取图像信息

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

完成本期内容你可以

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

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

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

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

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

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

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

  • 硬件环境无特殊要求

  • 核心库python 3.6.13 opencv-contrib-python 3.4.11.39opencv-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()

请添加图片描述

处理前后对比

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

点击下载源码

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6