当前位置: 首页 > news >正文

机器学习:opencv--图像形态学

目录

前言

一、常用形态学操作

二、腐蚀和膨胀

1.图像腐蚀

2.图形膨胀

三、开运算和闭运算

1.开运算

2.闭运算

四、顶帽和黑帽

1.顶帽

2.黑帽

五、梯度运算

总结


前言

        图像形态学是一种用于处理和分析图像形状和结构的技术。

 

一、常用形态学操作

  1. 膨胀(Dilation):扩展前景区域,使对象变大。
  2. 腐蚀(Erosion):缩小前景区域,去除小的噪声点。
  3. 开运算(Opening):先腐蚀后膨胀,用于去除小物体。
  4. 闭运算(Closing):先膨胀后腐蚀,用于填充小孔洞。
  5. 顶帽(Top-hat):原图像与开运算结果的差异。用于提取图像中比背景亮的细节,通常用于突出小的亮区域。
  6. 黑帽(Black-hat):闭运算结果与原图像的差异。用于提取图像中比背景暗的细节,通常用于突出小的暗区域。
  7. 梯度运算:梯度运算实际上是膨胀操作减去腐蚀操作的结果。

 

二、腐蚀和膨胀

1.图像腐蚀

  • 缩小前景区域,去除小的噪声点。
import numpy as np
import cv2"""
图像腐蚀
dst = cv2.erode(src, kernel, dst,anchor,iterations,borderType,borderValue)
"""
sun = cv2.imread('sun.png')
cv2.imshow('sun', sun)
cv2.waitKey(0)kernel = np.ones((2, 2), np.uint8)  # 设置kernel大小
erosion_1 = cv2.erode(sun, kernel, iterations=5)
cv2.imshow('erode', erosion_1)
cv2.waitKey(0)

输出:

  • 左边是原图,右边是腐蚀之后的

 

2.图形膨胀

  • 扩展前景区域,使对象变大。
import numpy as np
import cv2"""
图像膨胀
dst = cv2.dilate(img, kernel,iteration)
"""
text = cv2.imread('eng_text.png')
cv2.imshow('text', text)
cv2.waitKey(0)kernel = np.ones((2, 2), np.uint8)
text_new = cv2.dilate(text, kernel, iterations=3)
cv2.imshow('dilate', text_new)
cv2.waitKey(0)

输出:

  • 左边是原图,右边是膨胀之后的图像

 

三、开运算和闭运算

1.开运算

  • 先腐蚀后膨胀,用于去除小物体。
# 开运算 先腐蚀后膨胀
zw_noise = cv2.imread('zw_noise.png')
cv2.imshow('zw_noise', zw_noise)
cv2.waitKey(0)kernel = np.ones((2, 2), np.uint8)
zw_open = cv2.morphologyEx(zw_noise, cv2.MORPH_OPEN, kernel)  # 先腐蚀 后膨胀
cv2.imshow('zw_open', zw_open)
cv2.waitKey(0)

输出:

  • 左边是原图,右边是进行开运算之后的图片

 

2.闭运算

  • 先膨胀后腐蚀,用于填充小孔洞。
zw = cv2.imread('zw.png')
cv2.imshow('zw', zw)
cv2.waitKey(0)kernel = np.ones((5, 5), np.uint8)
zw_close = cv2.morphologyEx(zw, cv2.MORPH_CLOSE, kernel)  # 先腐蚀 后膨胀
cv2.imshow('zw_close', zw_close)
cv2.waitKey(0)

输出:

  • 左边是原图,右边是经过闭运算之后的图
  • 可以看出来指纹有些断开的地方连接起来了

 

四、顶帽和黑帽

1.顶帽

  • 原图像与开运算结果的差异。用于提取图像中比背景亮的细节,通常用于突出小的亮区域。
sun = cv2.imread('sun.png')
cv2.imshow('sun', sun)
cv2.waitKey(0)kernel = np.ones((2, 2), np.uint8)
# 开运算
open_sun = cv2.morphologyEx(sun, cv2.MORPH_OPEN, kernel)
cv2.imshow('open_sun', open_sun)
cv2.waitKey(0)
# 顶帽
tophat = cv2.morphologyEx(sun, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出:

  • 左边原图,中间开运算,右边顶帽运算
  • 顶帽之后有种凹陷的感觉

 

2.黑帽

  • 闭运算结果与原图像的差异。用于提取图像中比背景暗的细节,通常用于突出小的暗区域。
sun = cv2.imread('sun.png')
cv2.imshow('sun', sun)
cv2.waitKey(0)
kernel = np.ones((2, 2), np.uint8)
cv2.imshow('sun', sun)
cv2.waitKey(0)
# 闭运算
close_sun = cv2.morphologyEx(sun, cv2.MORPH_CLOSE, kernel)
cv2.imshow('close_sun', close_sun)
cv2.waitKey(0)
# 黑帽
blackhat = cv2.morphologyEx(sun, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat', blackhat)
cv2.waitKey(0)

输出:

  • 左边原图,中间闭运算,右边黑帽之后的图片

 

五、梯度运算

  • 用于提取图像的边缘,计算图像的变化率。
"""
梯度运算: 膨胀-腐蚀
"""
text = cv2.imread('eng_text.png')
# cv2.imshow('text', text)
# cv2.waitKey(0)kernel = np.ones((2, 2), np.uint8)
# 膨胀
pz_text = cv2.dilate(text, kernel, iterations=2)
cv2.imshow('pz_text', pz_text)
cv2.waitKey(0)
# 腐蚀
fs_text = cv2.erode(text, kernel, iterations=2)
cv2.imshow('fs_text', fs_text)
cv2.waitKey(0)
# 膨胀-腐蚀
text_new = cv2.morphologyEx(text, cv2.MORPH_GRADIENT, kernel)
cv2.imshow('text_new', text_new)
cv2.waitKey(0)

输出:

  • 左边是膨胀的图片,中间是腐蚀的图片,右边是梯度运算之后的图片
  • 有一种镂空的感觉

 

总结

        这些处理方法主要用于图像的边缘检测和特征增强。通过膨胀,图像的前景区域会被扩展,填补细小的空洞;通过腐蚀,前景区域会被缩小,去除噪声。梯度运算(膨胀减腐蚀)则能够突出图像中的边缘信息,有助于识别和分析图像中的结构和形状。

http://www.lryc.cn/news/433967.html

相关文章:

  • 网络基础入门指南(一)
  • 【项目】云备份
  • WebGL系列教程二(环境搭建及初始化Shader)
  • keepalive和nginx高可用集群
  • 二分查找题总结
  • 仕考网:公务员面试流程介绍
  • (十五)SpringCloudAlibaba-Sentinel持久化到Nacos
  • GitHub图床
  • 记一次高版本view-design的组件迁移到自身项目的低版本
  • QT运行ROS工程
  • 电脑技巧:如何在Win11电脑上调整设置,让屏幕更加护眼?
  • 【数据结构】排序算法篇二
  • python进阶篇-day09-数据结构与算法(非线性结构与排序算法)
  • 线性代数基础
  • LCR 021
  • 【阿雄不会写代码】全国职业院校技能大赛GZ036第四套
  • Vue组件:使用$emit()方法监听子组件事件
  • 数据分析-埋点
  • 【文心智能体】通过工作流使用知识库来实现信息查询输出,一键查看旅游相关信息,让出行多一份信心
  • 服务器监控工具都是监控服务器的哪些性能和指标
  • 不小心删除丢失了所有短信?如何在 iPhone 上查找和恢复误删除的短信
  • 【skyvern 快速上手】一句话让AI帮你实现爬虫+自动化
  • 【C++ Primer Plus习题】14.1
  • 在Ubuntu上运行QtCreator相关程序
  • MybatisPlus 快速入门
  • Java.lang中的String类和StringBuilder类介绍和常用方法
  • notepad++软件介绍(含安装包)
  • chapter13-常用类——(章节小结)——day17
  • RTX AI PC 和工作站上部署多样化 AI 应用支持 Multi-LoRA
  • C++ STL-deque容器入门详解