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

目录

前言

一、常用形态学操作

二、腐蚀和膨胀

1.图像腐蚀

2.图形膨胀

三、开运算和闭运算

1.开运算

2.闭运算

四、顶帽和黑帽

1.顶帽

2.黑帽

五、梯度运算

总结


前言

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

一、常用形态学操作

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

二、腐蚀和膨胀

1.图像腐蚀

  • 缩小前景区域,去除小的噪声点。
python 复制代码
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.图形膨胀

  • 扩展前景区域,使对象变大。
python 复制代码
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.开运算

  • 先腐蚀后膨胀,用于去除小物体。
python 复制代码
# 开运算 先腐蚀后膨胀
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.闭运算

  • 先膨胀后腐蚀,用于填充小孔洞。
python 复制代码
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.顶帽

  • 原图像与开运算结果的差异。用于提取图像中比背景亮的细节,通常用于突出小的亮区域。
python 复制代码
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.黑帽

  • 闭运算结果与原图像的差异。用于提取图像中比背景暗的细节,通常用于突出小的暗区域。
python 复制代码
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)

输出:

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

五、梯度运算

  • 用于提取图像的边缘,计算图像的变化率。
python 复制代码
"""
梯度运算: 膨胀-腐蚀
"""
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)

输出:

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

总结

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

相关推荐
青松@FasterAI24 分钟前
【程序员 NLP 入门】词嵌入 - 上下文中的窗口大小是什么意思? (★小白必会版★)
人工智能·自然语言处理
AIGC大时代39 分钟前
高效使用DeepSeek对“情境+ 对象 +问题“型课题进行开题!
数据库·人工智能·算法·aigc·智能写作·deepseek
硅谷秋水40 分钟前
GAIA-2:用于自动驾驶的可控多视图生成世界模型
人工智能·机器学习·自动驾驶
偶尔微微一笑1 小时前
AI网络渗透kali应用(gptshell)
linux·人工智能·python·自然语言处理·编辑器
深度之眼1 小时前
2025时间序列都有哪些创新点可做——总结篇
人工智能·深度学习·机器学习·时间序列
晓数1 小时前
【硬核干货】JetBrains AI Assistant 干货笔记
人工智能·笔记·jetbrains·ai assistant
jndingxin1 小时前
OpenCV 图形API(60)颜色空间转换-----将图像从 YUV 色彩空间转换为 RGB 色彩空间函数YUV2RGB()
人工智能·opencv·计算机视觉
Sherlock Ma2 小时前
PDFMathTranslate:基于LLM的PDF文档翻译及双语对照的工具【使用教程】
人工智能·pytorch·语言模型·pdf·大模型·机器翻译·deepseek
知舟不叙2 小时前
OpenCV中的SIFT特征提取
人工智能·opencv·计算机视觉
kadog2 小时前
PubMed PDF下载 cloudpmc-viewer-pow逆向
前端·javascript·人工智能·爬虫·pdf