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

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 ░

相关文章:

  • OpenCV-Python图形图像处理:利用黑帽去除图像浅色水印
  • OpenCV击中击不中HITMISS形态变换公开资料汇总
  • OpenCV图形图像击中击不中HITMISS变换处理基础知识
  • OpenCV-Python图像击中击不中变换理解的关键知识点及自定义实现
  • OpenCV-Python击中击不中HITMISS形态变换详解
  • OpenCV-Python击中击不中变换案例:长方形边界提取
  • OpenCV-Python击中击不中变换案例:绿叶轮廓提取
  • OpenCV-Python击中击不中变换案例:真图作核的绳网结匹配
  • 你不一定全知道的四种Python装饰器实现详解
  • 类的类装饰器简单实现思路及案例
  • OpenCV-Python图形图像处理:自用的一些工具函数源代码
  • OpenCV-Python图形图像处理:自用的一些工具函数功能及调用语法介绍
  • OpenCV-Python图形图像处理:split通道拆分和数组矩阵访问通道
  • Python图像处理:OpenCV HSV和标准表示法的区别以及转换
  • OpenCV-Python图像处理:用inRange刷选图像中指定颜色对象案例
  • 【Linux系统编程】快速查找errno错误码信息
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • AHK 中 = 和 == 等比较运算符的用法
  • angular2 简述
  • Angularjs之国际化
  • classpath对获取配置文件的影响
  • ESLint简单操作
  • FineReport中如何实现自动滚屏效果
  • IDEA常用插件整理
  • input的行数自动增减
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JavaScript 一些 DOM 的知识点
  • javascript数组去重/查找/插入/删除
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Java知识点总结(JavaIO-打印流)
  • js操作时间(持续更新)
  • laravel5.5 视图共享数据
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • node学习系列之简单文件上传
  • Odoo domain写法及运用
  • webpack4 一点通
  • 简单基于spring的redis配置(单机和集群模式)
  • 手写双向链表LinkedList的几个常用功能
  • 学习笔记TF060:图像语音结合,看图说话
  • 《码出高效》学习笔记与书中错误记录
  • gunicorn工作原理
  • HanLP分词命名实体提取详解
  • Prometheus VS InfluxDB
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (3)STL算法之搜索
  • (C#)一个最简单的链表类
  • (Matlab)使用竞争神经网络实现数据聚类
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • ./configure,make,make install的作用
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net Core和.Net Standard直观理解
  • .NET 中 GetProcess 相关方法的性能
  • .net开发引用程序集提示没有强名称的解决办法