直方图与均衡化

直方图

统计图像中相同像素点的数量。
使用cv2.calcHist(images, channels, mask, histSize, ranges)函数

images:原图像图像格式为uint8或float32,当传入函数时应用[]括起来,例如[img]。
channels:同样用中括号括起来,告诉我们统幅图像的直方图,如果图像是灰度图就是[0],如果是彩色图可以是[0],[1],[2],分别对应BGR。
mask:掩膜图像,统幅图像使用None,若使用一部分需要自行制作。
histSize:BIN的数目,也要中括号。
ranges:像素值范围一般为[0,256]

灰度图

img = cv2.imread('deppb.jpg', 0)
show.cv_show('img', img)
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
h1 = hist.shape
plt.hist(img.ravel(), 256)
plt.show()

灰度图
在这里插入图片描述
直方图
在这里插入图片描述

彩色图

img2 = cv2.imread('deppb.jpg')
show.cv_show('img2', img2)
color = ('b', 'g', 'r')
for i, col in enumerate(color):histr = cv2.calcHist([img2], [i], None, [256], [0, 256])plt.plot(histr, color=col)plt.xlim([0, 256])
plt.show()

彩色图
在这里插入图片描述
直方图
在这里插入图片描述
图为三通道的直方图

mask操作

mask,在指定区域置为255,其余区域置为0,与原图相与,最后得到指定区域的像素点个数统计,绘制直方图。

# 创建mask
show.cv_show('img2', img2)  # 原图
mask = np.zeros(img2.shape[:2], np.uint8)
print(mask.shape)
mask[200: 600, 100: 427] = 255
show.cv_show('mask', mask)  # mask图masked_img2 = cv2.bitwise_and(img2, img2, mask=mask)
show.cv_show('masked_img2', masked_img2)  # 原图与maskhist_full = cv2.calcHist([img2], [0], None, [256], [0, 256])
hist_mask = cv2.calcHist([img2], [0], mask, [256], [0, 256])
plt.plot(hist_full), plt.plot(hist_mask)  # [0]通道直方图对比
plt.show()

mask图
在这里插入图片描述
mask与原图相与
在这里插入图片描述
[0]通道直方图对比
在这里插入图片描述
蓝色为整体直方图,橙色为特定区域直方图。

均衡化

将一副图像的直方图分布通过累积分布函数变成近似均匀分布,从而增强图像的对比度。
在这里插入图片描述
根据像素点个数得到概率值,再算出累积概率类似于分布函数,再由累积概率映射出新的像素值,最后取整。

img3 = cv2.imread('deppb.jpg', 0)
plt.hist(img3.ravel(), 256)  # 原图直方图
plt.show()equ = cv2.equalizeHist(img3)
plt.hist(equ.ravel(), 256)  # 均衡化后直方图
plt.show()res = np.hstack((img3, equ))
show.cv_show('res', res)    # 图像对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到整体均衡化可能导致部分信息丢失。

自适应均衡化

其实是分区域进行均衡化,减少信息丢失。

clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))  # 方法
res_clahe = clahe.apply(img3)
plt.hist(res_clahe.ravel(), 256)  # 自适应均衡化后直方图
plt.show()
res = np.hstack((img3, equ, res_clahe))     # 与原图和整体均衡化对比
show.cv_show('res', res)

自适应均衡化的直方图
在这里插入图片描述

对比图
在这里插入图片描述
可以看到对比度加强而且信息丢失得到改善。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2011年AMC8数学竞赛中英文真题典型考题、考点分析和答案解析

今天是2023年12月30日,距离2024年元旦新年还有2天时间,先预祝所有的读者和小读者想今年工作、学习进步!幸福平安! 今天距离2024年1月19日的AMC8正式比赛只有20天的时间,我们继续来看AMC8竞赛的历年真题典型考题和解析…

Android笔记(二十二):Paging3分页加载库结合Compose的实现网络单一数据源访问

Paging3 组件是谷歌公司推出的分页加载库。个人认为Paging3库是非常强大,但是学习难点比较大的一个库。Paging3组件可用于加载和显示来自本地存储或网络中更大的数据集中的数据页面。此方法可让移动应用更高效地利用网络带宽和系统资源。在具体实现上,Pa…

根据文法求对应的语言

技巧:最后得到的是终结符组成的闭包 例题: 文法G[S]: S-->AB A-->aAb|ab B-->Bc|,求对应的语言 ①S-->(aAb|ab)(Bc|) ②我们可以观察到,无论A-->aAb还是A-->ab,都一定会同时出现ab,…

PiflowX组件-WriteToKafka

WriteToKafka组件 组件说明 将数据写入kafka。 计算引擎 flink 有界性 Streaming Append Mode 组件分组 kafka 端口 Inport:默认端口 outport:默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子kafka_hostKAFKA_HOST“”无是逗号…

使用Halcon 采集图像并进行简单处理rgbl_to_gray/threshold/connection/fill_up

使用Halcon 采集图像并进行简单处理 文章目录 使用Halcon 采集图像并进行简单处理 下面介绍一个简单的采集图像的例子。在Halcon中利用图像采集接口,使用USB3.0相机实时拍摄图像。采集到图像后对图像进行简单的阀值分割处理,将有物体的区域标记出来。 &a…

抬头举手阅读YOLOV8NANO

首先用YOLOV8NANO得到PT模型,转换成ONNX,OPENCV调用,PYTHON,C,ANDROID都可以举手写字阅读YOLOV8NANO

基于Freeswitch实现的Volte网视频通知应用

现在运营商的Volte网络已经很好的支持视频通话了,因此在原来的电话语音通知的基础上,可以更进一步实现视频的通知,让用户有更好的体验,本文就从技术角度,基于Freeswitch来实现此类应用(本文假设读者已对Fre…

Redis哨兵

1.哨兵介绍 1.1.为何需要哨兵? 为了解决master节点宕机问题,选举salve节点为新的master节点。 1.2.哨兵的作用 1.3.服务状态监控 1.4.选举新的master 1.5.如何实现故障转移 2.搭建哨兵集群 2.1.集群结构 这里我们搭建一个三节点形成的Sentinel集群&…

蓝桥杯-Excel地址[Java]

目录: 学习目标: 学习内容: 学习时间: 题目: 题目描述: 输入描述: 输出描述: 输入输出样例: 示例 1: 运行限制: 题解: 思路: 学习目标: 刷蓝桥杯题库日记 学习内容: 编号96题目Ex…

re:Invent 2023技术上新|Amazon DynamoDB与OpenSearch Service的Zero-ETL集成

Amazon DynamoDB 与 Amazon OpenSearch Service 的 Zero-ETL 集成已正式上线,该服务允许您通过自动复制和转换您的 DynamoDB 数据来搜索数据,而无需自定义代码或基础设施。这种 Zero-ETL 集成减少了运营负担和成本,使您能够专注于应用程序。这…

php获取访客IP、UA、操作系统、浏览器等信息

最近有个需求就是获取下本地的ip地址、网上搜索了相关的教程,总结一下分享给大家、有需要的小伙伴可以参考一下 一、简单的获取 User Agent 信息代码: echo $_SERVER[HTTP_USER_AGENT]; 二、获取访客操作系统信息: /** * 获取客户端操作系统信息,包括win10 * pa…

Adobe 设计精髓:创新的用户体验 | 开源日报 No.130

adobe/react-spectrum Stars: 10.1k License: Apache-2.0 React Spectrum Libraries 是一系列的库和工具,旨在帮助开发者构建适应性强、可访问性好且稳健的用户体验。 核心优势: 提供全面的可访问性和行为支持,符合 WAI-ARIA 编写实践&…

Transformer(seq2seq、self-attention)学习笔记

在self-attention 基础上记录一篇Transformer学习笔记 Transformer的网络结构EncoderDecoder 模型训练与评估 Transformer的网络结构 Transformer是一种seq2seq 模型。输入一个序列,经过encoder、decoder输出结果也是一个序列,输出序列的长度由模型决定…

redis cluster判断key属于那个分片。

一、判断阿里云 redis cluster,的key属于那个分片。 阿里云特有的命令info key 可以查看key属于那个slot,那个分片 命令行查看: xxxx:6379> info key xxxx_compressed_xxx slot:4941 node_index:9 xxxx:6379> cluster keyslot xxxx_…

基于 Webpack 插件体系的 Mock 服务

背景 在软件研发流程中,对于前后端分离的架构体系而言,为了能够更快速、高效的实现功能的开发,研发团队通常来说会在产品原型阶段对前后端联调的数据接口进行结构设计及约定,进而可以分别同步进行对应功能的实现,提升研…

WPF+Halcon 培训项目实战(8):WPF+Halcon初次开发

前言 为了更好地去学习WPFHalcon,我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主的提供的教程。这里只做笔记分享,想要源码或者教学视频可以和他联系一下。 相关链接 微软系列技术教程 WPF 年度公益课程 Halcon开发 CSD…

uniapp中uview组件库丰富的Calendar 日历用法

目录 基本使用 #日历模式 #单个日期模式 #多个日期模式 #日期范围模式 #自定义主题颜色 #自定义文案 #日期最大范围 #是否显示农历 #默认日期 基本使用 通过show绑定一个布尔变量用于打开或收起日历弹窗。通过mode参数指定选择日期模式,包含单选/多选/范围…

【JS笔记】JavaScript语法 《基础+重点》 知识内容,快速上手(二)

数组 什么是数组? 字面理解就是 数字的组合 其实不太准确,准确的来说数组是一个 数据的集合 也就是我们把一些数据放在一个盒子里面,按照顺序排好 [1, 2, 3, hello, true, false]这个东西就是一个数组,存储着一些数据的集合 …

复数值神经网络可能是深度学习的未来

一、说明 复数这种东西,在人的头脑中似乎抽象、似乎复杂,然而,对于计算机来说,一点也不抽象,不复杂,那么,将复数概念推广到神经网络会是什么结果呢?本篇介绍国外的一些同行的尝试实践,请我们注意观察他们的进展。

C语言 volatile关键字

volatile关键字介绍 volatile 是一个关键字,用于修饰变量,表示该变量是易变的,即可能在任何时候被意外地改变。在多线程编程中,当多个线程同时访问同一个变量时,由于线程之间的交互和优化,可能会导致变量的…