文章目录

引言np.histogram函数的基本用法参数表参数详解

histogram函数返回值详解第一个返回值hist——直方图的纵坐标第二个返回值bin_edges——直方图横坐标的边界

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

Numpy中文文档

引言

在NumPy库中,np.histogram函数是一个非常实用的工具,用于计算一维数组的直方图。它可以帮助我们在数据分析和科学计算中快速得到一系列数值的分布情况。本文将通过示例代码和详细注释,向大家介绍如何在三分钟内熟练使用np.histogram函数。

np.histogram函数的基本用法

np.histogram函数的基本语法如下:

numpy.histogram(a, bins=10, range=None, normed=None, weights=None, density=None)

参数表

参数说明类型默认值a输入数组array_like必须提供bins直方图的区间数int or sequence of scalars or str, optional10range直方图的范围(float, float), optionalNonenormed是否将直方图归一化bool, optionalNoneweights每个样本点的权重array_like, optionalNonedensity是否将直方图转换为概率密度函数bool, optionalNone

参数详解

位置参数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()

结尾

亲爱的读者,首先感谢您抽出宝贵的时间来阅读我们的博客。我们真诚地欢迎您留下评论和意见,因为这对我们来说意义非凡。 俗话说,当局者迷,旁观者清。您的客观视角对于我们发现博文的不足、提升内容质量起着不可替代的作用。 如果您觉得我们的博文给您带来了启发,那么,希望您能为我们点个免费的赞/关注,您的支持和鼓励是我们持续创作的动力。 请放心,我们会持续努力创作,并不断优化博文质量,只为给您带来更佳的阅读体验。 再次感谢您的阅读,愿我们共同成长,共享智慧的果实!

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: