OpenCV-Python图形图像处理:利用TopHat顶帽获取背景色中的噪点

☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython

一、顶帽简介

顶帽(Top Hat),又称“礼帽”运算,其结果图像为原图像与其开运算的差,即:
dest=src-open(src,kernal)

由于开运算是先腐蚀后膨胀,会去除背景色上的噪点或者轮廓线上的毛刺和凸起,同时也会缩小图像前景轮廓的范围,实际上也就是放大了图像间裂缝或者局部背景色区域,因此从原图中减去开运算后的图,运算结果保留了原图那些相对比周边更明亮的区域,如背景色中的白色噪点或轮廓线。所以顶帽可以用来分离比邻近区域亮一些的线条或噪点,当一幅图像具有大幅的背景(如黑底)的时候,可以使用顶帽运算提取暗背景下的亮色点或线等物体。

顶帽在OpenCV-Python的调用语法如下:
morphologyEx(src, CV2.MORPH_TOPHAT, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)

关于morphologyEx的介绍请参考《OpenCV-Python图像形态变换概述及morphologyEx函数介绍: https://blog.csdn.net/LaoYuanPython/article/details/109556425》。

二、利用顶帽提取噪点

2.1、案例1:处理黑色背景的灰度图
2.1.1、案例原图

在如下图像(对应文件:大背景小前景图例.jpg)中,第一行第二个图像和第二行第一个图像临近区域都有噪点:
在这里插入图片描述

2.1.2、处理代码
import cv2
import numpy as np

from opencvPublic import print2DMatrix,preparePreviewImg,previewImgList,previewImg

def morphologyExTest(imgObj,imgTitle=''):
    if isinstance(imgObj, str):
        img = cv2.imread(imgObj)#, cv2.IMREAD_GRAYSCALE)
        if img is None:
            img = cv2.imdecode(np.fromfile(imgObj, dtype=np.uint8), -1)
        imgTitle = imgTitle+imgObj+': '
    else:
        imgTitle = imgTitle + ': '
    if len(img.shape)==2: channel = 1
    else: channel = img.shape[2]
    if channel==3:
        img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    elif channel==4:
        img = cv2.cvtColor(img,cv2.COLOR_BGRA2GRAY)
    ksize = (3,3)
    kernal = cv2.getStructuringElement(cv2.MORPH_RECT,ksize )
    preparePreviewImg(cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernal),imgTitle+f'顶帽,矩形核大小{ksize}')

def morphologyTest():
    morphologyExTest(r'f:\pic\大背景小前景图例.jpg')
    previewImgList()

morphologyTest()

上面代码中使用的图像预览的函数请见《OpenCV-Python图像运算变换处理:开运算和闭运算以及不同核矩阵的影响分析: https://blog.csdn.net/LaoYuanPython/article/details/109984045》的介绍。

2.1.3、结果图像

经上述代码处理后,该原图顶帽运算的结果图像如下:
在这里插入图片描述
从上述结果图像可以看到,顶帽将黑色背景下的白色噪点以及细小的轮廓图像获取出来了,而那些轮廓线稍微大些的轮廓在顶帽后消失了。

2.2、案例2:处理彩色图像

将上述代码中处理的原图替换为如下图像(文件名:山林铁轨.JPG):
在这里插入图片描述
得到如下顶帽结果图像:
在这里插入图片描述
可以看到原图中相对比较亮的文字被提取出来。

2.3、案例3:处理黑色背景的彩色图像

原图如下(文件名:简单图形.png):
在这里插入图片描述
得到如下顶帽结果图像:
在这里插入图片描述

可以看到白色线条被提取出来。

三、小结

本文简单介绍了顶帽的概念、原理和作用,以及OpenCV-Python的具体实现,并提供了三个利用顶帽提取图像中前景色噪点或小的轮廓,可以看到通过顶帽可以提取出相对源图像中小的比较亮的部分。其实顶帽就是用一个结构元素(核矩阵)通过开操作从一副图像中删除前景色中比较成整体稍大的部分,留下来前景色中相对比较亮的细小部分,就是从图像的暗背景上提取细小的亮物体,因此顶帽这个特性可以用于校正不均匀光照的影响(请参考博文:《光照不均匀图像分割技巧2——顶帽变换和底帽变换》)。

写作不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

四、形态变换博文传送门

下面是老猿博文中与形态变换相关的博文列表:

  1. https://blog.csdn.net/LaoYuanPython/article/details/109441709 OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍
  2. https://blog.csdn.net/LaoYuanPython/article/details/109984045 OpenCV-Python图像运算变换处理:开运算和闭运算以及不同核矩阵的影响分析
  3. https://blog.csdn.net/LaoYuanPython/article/details/109556425 OpenCV-Python图像形态变换概述及morphologyEx函数介绍
  4. https://blog.csdn.net/LaoYuanPython/article/details/109768675 OpenCV-Python图像运算变换处理:形态学梯度运算及分类
  5. https://blog.csdn.net/LaoYuanPython/article/details/110195287 OpenCV-Python中预览超大图的程序实现方法
  6. https://blog.csdn.net/LaoYuanPython/article/details/110223709 OpenCV-Python图形图像处理:利用TopHat顶帽获取背景色中的噪点
  7. https://blog.csdn.net/LaoYuanPython/article/details/110294445 OpenCV-Python图形图像处理:利用黑帽去除图像浅色水印
  8. https://blog.csdn.net/LaoYuanPython/article/details/110676764 OpenCV-Python击中击不中HITMISS形态变换详解

更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理 》
专栏网址https://blog.csdn.net/laoyuanpython/category_9979286.html

关于老猿的付费专栏

老猿的付费专栏《使用PyQt开发图形界面Python应用 》(https://blog.csdn.net/laoyuanpython/category_9607725.html)专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》 (https://blog.csdn.net/laoyuanpython/category_10232926.html)详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏都适合有一定Python基础但无相关知识的小白读者学习。

付费专栏文章目录:《moviepy音视频开发专栏文章目录》(https://blog.csdn.net/LaoYuanPython/article/details/107574583)、《使用PyQt开发图形界面Python应用专栏目录 》(https://blog.csdn.net/LaoYuanPython/article/details/107580932)。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》(https://blog.csdn.net/laoyuanpython/category_9831699.html)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学OpenCV!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值