Opencv+Python笔记(十)灰度直方图、直方图均衡化、掩模的应用

news2024/9/21 2:37:45

目录

    • 一、灰度直方图
    • 二、图像掩模的应用
    • 三、直方图均衡化
      • 1.直方图均衡化
      • 2.自适应的直方图均衡化

一、灰度直方图

概念:
灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。(百度百科)

灰度直方图即对图像中的所有像素点灰度值大小频率的统计

部分定义:
1.dims:需要统计的特征数目。若为灰度图 dims = 1;若为BGR三色 dims = 3;
2.bins:每个特征空间子区段的数目。即直方图中竖条的个数;
3.range:统计特征的取值范围,一般来说是 [0, 256] 表示左闭右开

直方图的意义:
直方图能直观表现图像中像素强度分布:
低灰度级集中,则表示比较暗。
高灰度级集中,则表示比较亮。
中灰度级集中,动态范围不足,对比度比较差。
均衡分布的图像,从低到高,像素占据比较均衡。

Opencv API:

cv2.calcHist(img, channels, mask, histSize, ranges)

参数:
img:原图像 注意:传入该函数时要加中括号即 [img]
channels:如果入图像是灰度图它的值就是[0] ,如果是彩色图像 的传入的参数可以是 [0][1][2] 它们分别对应着 BGR。
mask:掩模图像。要统计整幅图像的直方图就把它设为None。若想统计图像某一部分的直方图的话则引用该掩模。
histSize:histSize:bins的数目。也应该用中括号括起来,例如:[256]。
ranges:像素值范围。通常为[0,256]。左闭右开

代码:

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

greyScale_map = cv2.calcHist([gray], [0], None, [256], [0, 256])

plt.plot(greyScale_map)  #函数plt.plot()绘制曲线图
plt.grid()  #函数plt.grid()打开绘图网线 使图片背景为网格状
plt.show()

在这里插入图片描述

二、图像掩模的应用

定义:
掩模也叫做掩码,在程序中用二值图像来表示,0值区域标识被遮盖的部分,255值区域表示被暴露的部分。

掩模的用途:
1.掩模可以提取图像中感兴趣的区域即ROI区域
2.掩模可以将图像中的某些部分屏蔽掉

一般通过numpy库中的函数建立掩模,然后通过图像与运算来求得ROI区域或屏蔽其他区域

代码:

#创建掩模 img.shape[:2]即仅引用img.shape的前两个参数(第三个参数为颜色通道, 前两个为长宽)
img_copy = img.copy()
mask = np.zeros(img.shape[:2], np.uint8)

mask[200:300, 300:500] = 255  #划定感兴趣区域  做与运算时屏蔽区域为0感兴趣区域为255

mask_copy = cv2.bitwise_and(img_copy, img_copy, mask = mask)

在这里插入图片描述

三、直方图均衡化

1.直方图均衡化

直方图均衡化是一种简单有效的图像增强技术,通过改变图像的直方图来改变图像中各像素的灰度,主要用于增强动态范围偏小的图像的对比度。灰度分布集中在较窄的区间往往会导致图像的不清晰,直方图均衡化即通过对直方图中像素灰度值的展宽来实现增强图像对比度。

Opencv API:

img_equal = cv2.equalizeHist(img)

在这里插入图片描述

2.自适应的直方图均衡化

原理:
将整幅图像分成很多小块,对每一个小块分别进行直方图均衡化,再使用双线性差值去除每个小块之间的边界,对每一小块进行拼接得到最终直方图均衡化的图像。
但是如果有噪声的话,噪声会被放大。所以为了避免这种情况的出现就要使用对比度限制。

Opencv API:

clahe = cv2.createCLAHE(clipLimit, tileGridSize)
dst = clahe.apply(img)

参数:
clipLimit:颜色对比度的阈值,可选项,默认值 40
tileGridSize:局部直方图均衡化的模板(邻域)大小,可选项,默认值 (8,8)

代码:

clahe = cv2.createCLAHE(4.0, (8, 8))
img_eq_2 = clahe.apply(img)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/459463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP-重复制造行业为什么推荐定额工艺路线

翻译一篇大佬的文章: Why Rate Routing is (recommended) used in Repetitive Manufacturing? 看多了博客解Routing和Rate routing的区别,看来还是有很多会员不满意或者不清楚,对此类问题的概念或解释。我认为很少有屏幕截图的博客可以帮助…

UML--类图--软件工程系统学习-- idea查看类图-类关系图

文章目录 什么是类图类图的用途类图的组成 类什么是类类符号类关系依赖(Dependence)idea查看依赖 关联关系(association)继承/泛化idea查看继承 实现(realization)聚合组成组合和聚合之间的差异 类图详解id…

无感平滑迁移:海量高并发数据库如何进行国产化改造?

首先,讲一下数据库国产化的大背景。 一、数据库国产化的背景 国家战略方面的,随着外部形势的日益复杂,核心技术急需实现自主可控、安全可靠、高效开放;另一个要求是业务方面的,当业务高速发展后各种问题会接踵而至&a…

Go | 一分钟掌握Go | 4 - 数组

作者:Mars酱 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我! 说明 特意省去了很多基础章节,比如常量、变量、条件语句、判断语…

GPT应用-使用中文操作数据库

GPT应用-使用中文操作数据库 本次尝试使用langchain来操作数据库; 环境配置 下面是数据库相关的表,使用Mysql5.7 数据库,数据库名students 下面是相关表的介绍 学生表,有名字、分数、和老师的备注 学生父母表,其中有学生的名…

053:cesium显示网格切片标识,展示X、Y、Level 坐标

第053个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载瓦片网格切分标识地图。,它在切片方案中的每个渲染图块周围绘制一个框,并在其中绘制一个标签,指示图块的 X、Y、Level 坐标。 这主要用于调试地形和图像渲染问题。 直接复制下面的 vue+cesium源代码,操…

【Buildroot】基础知识:目录、根文件系统目录覆盖、编译性能分析(编译时间、目标尺寸、包依赖图)

文章目录 一、Buildroot目录介绍二、Finalizing target2.1 fs overlay2.2 post build2.3 post image 三、编译性能3.1 编译耗时3.2 编译依赖关系3.3 编译结果尺寸分析3.4 其他文件 buildroot官方教程 buildroot使用介绍 Buildroot官网上可以下载发布版 国内的SOC厂商Rockchip就…

第二届SWCTF部分WP

1、misc (1)Misc1 下载附件,压缩包里面有两张jpg图片 解压后习惯性的放进kali里面分析一下,没有隐藏文件 放到Stegsolve里分析,因为是两张一样的图片,combiner也没啥发现 分别对两张图片单独分析也没有发…

网卡,dma,内存关系

本篇主要讲网卡的工作原理 最近在做一个网卡仿真程序。主要目的是用程序代替网卡去向内存中填充报文。 网卡与内存的交互方式 1. rx阶段 网卡通过DMA向内存中发送数据包。 在内存中主要有三个数据结构 ① DMA环(rx_ring), 其中存储了DMA描述符, DMA描述符指向了实际物理地址…

【Python | 基础语法篇】01、字面量、注释、变量、数据类型及转换

目录 一、字面量 1.1 什么是字面量 1.2 常用的值类型 1.3 字符串 1.4 如何在代码中写它们 1.5 总结 二、注释 2.1 注释的作用 2.2 注释的分类 2.3 注释实战 2.4 总结 2.5 思考 三、变量 3.1 什么是变量 3.2 案例——模拟钱包 3.3 变量的特征 3.4 思考 3.5 …

一篇文章看懂MySQL的多表连接(包含左/右/全外连接)

MySQL的多表查询 这是第二次学习多表查询,关于左右连接还是不是很熟悉,因此重新看一下。小目标:一篇文章看懂多表查询!! 这篇博客是跟着宋红康老师学习的,点击此处查看视频,关于数据库我放在了…

主动式电容笔是什么?苹果平替电容笔性价比高的推荐

苹果Pencil在市场上有需求吗?苹果的原装电容笔,虽然功能强大,但价格却非常的昂贵。当然,你也可以用这个苹果Pencil,不过,如果你不想花大价钱买它,就可以选一支平替的电容笔。就当前的科技水平而…

黑客利用WordPress 插件暗中建立后门网站

东方联盟网络安全组织在上周发布的一份报告中透露,有人观察到威胁行为者利用一个合法但过时的 WordPress 插件暗中建立后门网站,作为正在进行的活动的一部分。 有问题的插件是 Eval PHP,由名为 flashpixx 的开发人员发布。它允许用户插入 PH…

从需求分析到上线发布,一步步带你开发收废品小程序

在如今的环保和可持续性的大趋势下,废品回收已经成为了人们日常生活中不可或缺的一部分。收废品小程序的开发可以帮助人们更方便地找到回收废品的地点,并有效减少废品对环境造成的污染。因此,我们的收废品小程序需要满足以下需求:…

Google Play编写长描述的最佳实践

在我们为应用编写详细说明时,要遵循以下建议: 我们作为应用营销人员,要了解受众群体的需求和顾虑,如果不知道用户关心什么,那么我们可以查看关键词的搜索量、每个关键词的 Google Play 安装报告、当前关键字排名等等。…

数据湖Iceberg-Hive集成Iceberg(3)

文章目录 Hive集成Iceberg环境准备Hive与Iceberg的版本对应关系如下上传jar包,拷贝到Hive的auxlib目录中修改hive-site.xml,添加配置项启动 HMS 服务启动 Hadoop 创建和管理 Catalog默认使用 HiveCatalog指定 Catalog 类型使用 HiveCatalog使用 HadoopCa…

HTML+CSS+JS 学习笔记(三)———Javascript(下)

🌱博客主页:大寄一场. 🌱系列专栏:前端 🌱往期回顾:HTMLCSSJS 学习笔记(三)———Javascript(上) 😘博客制作不易欢迎各位👍点赞⭐收藏➕关注 目录 JavaScrip…

【ChatGPT】如何让 ChatGPT 不再频繁报错,获取更加稳定的体验?

文章目录 一、问题描述二、方案1:使用 OpenAI API Key 来访问 ChatGPT三、方案2:安装 Chrome 插件3.1 介绍3.2 安装步骤3.2.1 插件 & 脚本安装3.2.2 解读功能 一、问题描述 最近一段时间,相信大家都发现了 ChatGPT 一个问题,…

阿里二面:Spring用到了哪些设计模式?

代理模式 所谓代理,是指它与被代理对象实现了相同的接口,客户端必须通过代理才能与被代理的目标类进行交互,而代理一般在交互的过程中(交互前后),进行某些特定的处理,比如在调用这个方法前做前…

计算机网络|第二章:应用层

分层体系结构回顾 在本章中,我们学习有关网络应用的原理和实现方面的知识。 我们从定义关键的应用层概念开始,其中包括应用程序所需要的网络服务、客户和服务器、进程和运输层接口。详细考察几种网络应用程序,包括Web、电子邮件、DNS、对等文…