OpenCV开发教程之顶帽操作

18人浏览 / 0人评论 / 添加收藏

顶帽操作是图像处理中的一把“手术刀”,专门用来分离和强化图像里那些比周围更亮的微小细节。它背后的逻辑并不复杂:顶帽 = 原图 - 开运算

这里的“开运算”像一个“过滤器”,先腐蚀再膨胀,能抹去图像中比自身结构元素小的亮斑和细节。原图减去过滤掉细节的图,剩下的自然就是我们想找的微小亮部特征了。

开运算的效果是去除图形外的噪点,原图-开运算就得到了外部的噪点。那什么是开运算呢?

1. 开运算 = 先腐蚀 + 后膨胀

 
作用:去除小白点噪点,不破坏主体形状
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) 
 

2. 闭运算 = 先膨胀 + 后腐蚀

 
作用:填充小黑洞,连接断裂文字

closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

具体关于什么是腐蚀和膨胀的介绍,大家可以看过往的这篇文章:OpenCV开发教程之腐蚀与膨胀

其中对什么开运算和闭运算做了介绍。

  • 膨胀(Dilate):白色区域变大,扩大噪点
  • 腐蚀(Erode):白色区域变小,消除噪点
  • 常用于:去噪、分割文字、连通区域、轮廓预处理

# 顶帽运算代码
import cv2
import numpy as np
from opencv_jupyter_ui import cv2_imshow
#导入图片
img = cv2.imread('./images/j2.png')
print(img.shape)

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (9,9))
print(kernel)
dst = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel, iterations=1)

# 显示结果
cv2_imshow('顶帽运算', np.hstack((img,dst)))

通过上图发现,左边的图只剩下了白色的噪点。

附注:

形态学操作对比一览表:

 
 
操作 执行顺序 核心作用 对目标物体的影响 典型应用
腐蚀 单独操作 消除边界点,收缩物体 尺寸减小 消除细小噪点,分离物体
膨胀 单独操作 扩张边界,填充空洞 尺寸增大 连接断裂部分,填充小孔
开运算 先腐蚀,后膨胀 消除亮背景中的暗点噪点,分离粘连物体 尺寸和形状基本不变 图像去噪,物体分离
闭运算 先膨胀,后腐蚀 填充暗背景中的亮点孔洞,连接断裂部分 尺寸和形状基本不变 填充孔洞,连接邻近物体
顶帽 原图 - 开运算 提取出被开运算消除的微小部细节 N/A 校正不均匀光照,提取微小目标
黑帽 闭运算 - 原图 提取出被闭运算填充的微小部细节 N/A 提取暗色轮廓或斑点

全部评论