【五分钟】熟练使用numpy的histogram函数(干货!!!)

news2024/9/28 13:23:58

histogram函数重要参数详解

def histogram(a, bins=10, range=None, normed=None, weights=None, density=None):
	...
  • 位置参数a:

The histogram is computed over the flattened array.(源码对参数a的解释)

从源码对参数a的解释来看,参数a应该传入一维数组以计算直方图。然而,参数a既可接受PIL.Image对象,也可接受多维数组对象。参数a之所以能够接受PIL.Image对象,是因为histogram函数内部会通过数组的asarray方法将PIL.Image对象转换为numpy的多维数组;而参数a之所以能够接受多维数组,是因为histogram函数内部会通过数组的reval方法将多维数组展开成一维数组。

  • 默认参数bins
    bins参数规定的是直方图中箱子的数量
    以灰度直方图为例,灰度图像的数值范围是[0, 255],共256个数值。假定256个灰度级,等价于灰度直方图将有256个箱子 ==> bins应设置为256;

  • 默认参数range
    range参数规定直方图横坐标的显示范围,默认为数据的范围(最小值和最大值)。如果灰度图像像素的最小值为30,最大值为220,而range不自行规定为(0, 255),那么画出的直方图横坐标数值范围为(30, 220),如下所示:
    在这里插入图片描述
    因此,若要画灰度图像256个灰度级的灰度直方图,建议将range参数设置为(0, 255)。

histogram函数返回值详解

第一个返回值hist——直方图的纵坐标

若要绘制灰度直方图,那么histogram函数返回的第一个值便记录了灰度直方图每个灰度级的像素个数,也就是灰度直方图的所有纵坐标。如果由256个灰度级,那么返回值hist的长度便为256。

第二个返回值bin_edges——直方图横坐标的边界

由于直方图是由一个个“箱子组成的”,那么每个箱子都有左右边界,且相邻箱子共用一个边界。那么对于灰度直方图而言,如果有256个灰度级 ⇒ 256个箱子(bins=256) ⇒ 257个不同边界(共有边界算一个)。因此,返回的bin_edges的长度是 len(hist) + 1。bin_edges的两端边界受到参数range的影响。如果range为(0, 255), 那么bin_edges的左端边界为0,右端边界为255, 并等间隔划分256份(由bins参数决定),共257个边界值。如果range为(0, 100), 那么bin_edges的左端边界为0,右端边界为100,仍然等间隔划分256份(由bins参数决定),共257个边界值。

基于histogram函数画灰度图像的灰度直方图

代码如下:

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

# 读取图像并将其转换为灰度图像
img = Image.open('lena.jpg').convert('L')

# 计算图像的灰度直方图
# histogram的输入既可以是PIL.Image对象,也可以是多维数组
hist, bin_edges = np.histogram(a=img, bins=256, range=(0, 255))

# 绘制灰度直方图
plt.bar(bin_edges[:-1], hist) # bin_edges的长度是hist长度 + 1 故舍弃bin_edges数组最后一个数值
plt.show()

结束语

如果本博文对你有所帮助,可以点个赞/收藏支持一下,如果能够持续关注,小编感激不尽~
如果有相关需求/问题需要小编帮助,欢迎私信~
小编会坚持创作,持续优化博文质量,给读者带来更好de阅读体验~

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

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

相关文章

[树莓派3B+][内核版本6.1]的linux内核编译+替换 (超详细)

学习Linux的内核编译,我使用的是x86 64位的18.04的ubuntu-linux虚拟机: 目录 树莓派的Linux内核源码安装 操作系统的启动过程 & Bootloader 单片机裸机:C51,STM32 X86,Intel:windows 嵌入式产品:…

深圳市左下右上百度坐标

爬取百度POI的时候,别人的代码中有提到左下,右上坐标,但是没有说从哪里来,而且还是百度的坐标。 经纬度:左下角,右上角:113.529103,37.444122;115.486183,38.768031 墨卡托坐标:左下角,右上角:12638139.45,…

由11月27日滴滴崩溃到近两个月国内互联网产品接二连三崩溃引发的感想

文章目录 知乎文分析微信聊天截图微信公众号 滴滴技术 发文k8s 官方文档滴滴官方微博账号 近两个月国内互联网产品“崩溃”事件2023-10-23 语雀崩溃2023-11-12 阿里云崩溃2023-11-27 滴滴崩溃2023-12-03 腾讯视频崩溃总结 我的感想 知乎文分析 最近连续加班,打车较…

d3dx9_43.dll丢失原因以及5个解决方法详解

在电脑使用过程中,我们可能会遇到一些错误提示,其中之一就是“d3dx9_43.dll缺失”。这个错误提示通常表示我们的电脑上缺少了DirectX的一个组件,而DirectX是游戏和多媒体应用所必需的软件。本文将介绍d3dx9_43.dll缺失对电脑的影响以及其原因…

第0篇红队笔记-APT-HTB

nmap 80 port-web尝试 searchploit-无结果 资源隐写查看-无结果 135 port rpcclient rpcinfo.py rpcdump.py rpcmap.py rpcmap.py爆破UUID 查看该UUID的表代表的服务能搜到UUID的漏洞 IOXIDResolver提取IPv6地址 IPV6-nmap smb smb探测目录 文件下载 测试其他目录 zip文件…

不再只是android,华为自爆Harmony将对标iOS

今年10月,华为官方宣布,鸿蒙OS 4升级设备数量已突破1亿,成为史上升级最快的鸿蒙OS版本。 日前,据数码博主“定焦数码”消息,大厂技术员工做适配,通过线下沟通时,华为反复提到一个问题&#xff…

很多人忽略的另外一种伦敦银交易计划

做伦敦银我们需要有交易计划,通过计划来执行交易,很多投资者清楚这一点。但是,实际交易中我们需要的计划不是一个,而是两个,那是哪两个计划呢?下面我们就来讨论一下。 具体交易的计划。怎么在一笔交易中取得…

BiseNet实现遥感影像地物分类

遥感地物分类通过对遥感图像中的地物进行准确识别和分类,为资源管理、环境保护、城市规划、灾害监测等领域提供重要信息,有助于实现精细化管理和科学决策,提升社会治理和经济发展水平。深度学习遥感地物分类在提高分类精度、自动化程度、处理…

java后端技术演变杂谈(未完结)

1.0版本javaWeb:原始servletjspjsbc 早期的jsp:htmljava,页面先在后端被解析,里面的java代码动态渲染完成后,成为纯html,再通过服务器发送给浏览器显示。 缺点: 服务器压力很大,因为…

深入微服务架构 | 微服务与k8s架构解读

微服务项目架构解读 ① 什么是微服务? 微服务是指开发一个单个小型的但有业务功能的服务,每个服务都有自己的处理和轻量通讯机制,可以部署在单个或多个服务器上。 微服务也指一种种松耦合的、有一定的有界上下文的面向服务架构。也就是说&…

C++数据结构:B树

目录 一. 常见的搜索结构 二. B树的概念 三. B树节点的插入和遍历 3.1 插入B树节点 3.2 B树遍历 四. B树和B*树 4.1 B树 4.2 B*树 五. B树索引原理 5.1 索引概述 5.2 MyISAM 5.3 InnoDB 六. 总结 一. 常见的搜索结构 表示1为在实际软件开发项目中,常用…

链表【2】

文章目录 🥝24. 两两交换链表中的节点🥑题目🌽算法原理🥬代码实现 🍎143. 重排链表🍒题目🍅算法原理🍓代码实现 🥝24. 两两交换链表中的节点 🥑题目 题目链接…

【超详细】vue项目:Tinymce富文本使用教程以及踩坑总结+功能扩展

【【超详细】vue项目:Tinymce富文本使用教程以及踩坑总结功能扩展 引言:一、 开始二、快速开始1、安装Tinymce 三、封装成Vue组件1、文件结构2、index.vue3、dynamicLoadScript.js4、plugin.js5、toolbar.js 四、使用Tinymce组件五、业务逻辑实现1、添加…

vue中的this.$nextTick().then()

MENU 示例一示例二sortsplicepushrandomfloorMathwhile演示 示例一 let reorganize function (arr){let rest [];while (arr.length > 0) {let random Math.floor(Math.random() * arr.length);// 把获取到的值放到新定义的数组中rest.push(arr[random]);// 这句代码的作…

Leetcode每日一题学习训练——Python3版(从二叉搜索树到更大和树)

版本说明 当前版本号[20231204]。 版本修改说明20231204初版 目录 文章目录 版本说明目录从二叉搜索树到更大和树理解题目代码思路参考代码 原题可以点击此 1038. 从二叉搜索树到更大和树 前去练习。 从二叉搜索树到更大和树 给定一个二叉搜索树 root (BST),请…

网络安全卫士:上海迅软DSE的员工上网管理策略大揭秘!

在日常办公中,企业员工可能会在互联网上有意或无意的将一些包含内部重要信息的内容发布出去,从而造成不必要的违规及泄密风险,因此对终端用户进行规范的上网行为管理,既能有效预防重要数据泄密,同时也能提高员工办公效…

Java数据结构之《直接插入排序》(难度系数75)

一、前言: 这是怀化学院的:Java数据结构中的一道难度中等的一道编程题(此方法为博主自己研究,问题基本解决,若有bug欢迎下方评论提出意见,我会第一时间改进代码,谢谢!) 后面其他编程题只要我写完…

新书推荐——《Copilot和ChatGPT编程体验:挑战24个正则表达式难题》

《Copilot和ChatGPT编程体验:挑战24个正则表达式难题》呈现了两方竞争的格局。一方是专业程序员David Q. Mertz,是网络上最受欢迎的正则表达式教程的作者。另一方则是强大的AI编程工具OpenAI ChatGPT和GitHub Copilot。 比赛规则如下:David编…

OpenResty(nginx+lua+resty-http)实现访问鉴权

OpenResty(nginxluaresty-http)实现访问鉴权 最近用BI框架解决了一些报表需求并生成了公开链接,现在CMS开发人员打算将其嵌入到业务系统中,结果发现公开链接一旦泄露任何人都可以访问,需要实现BI系统报表与业务系统同步的权限控制。但是目前…

7、Qt延时的使用

一、说明 平时用到两种延时方式QThread::sleep()和QTimer::singleShot() 1、QThread::sleep() QThread类中如下三个静态函数: QThread::sleep(n); //延迟n秒 QThread::msleep(n); //延迟n毫秒 QThread::usleep(n); //延迟n微妙 这种方式使用简单,但是会阻…