详解Python PIL Image.histogram()

  • Post category:Python

Python PIL Image.histogram()函数详解

PIL(Python Imaging Library)是一个Python的第三方图像处理库,可以进行图像的读取、处理、存储等操作。其中,Image.histogram()函数是PIL库中一个用来获取图像直方图数据的函数。

1. 语法

该函数语法如下:

PIL.Image.Image.histogram(self, mask=None, histSize=None, ranges=None)

参数解析:

  • mask: 可选参数,若指定,则仅返回遮罩范围内的直方图数据。
  • histSize: 可选参数,指定直方图的宽度。
  • ranges: 可选参数,指定直方图数据的范围。

2. 返回值

返回一个元组(或列表),表示图像各通道直方图的数据。

对于二值化、灰度图像,则返回一个包含256个元素的列表,表示灰度值为0~255时,图像中对应的像素点的数量。

对于彩色图像,则返回一个长度为3的元组(或列表),表示各个颜色通道(R、G、B)的直方图数据。

3. 实例说明

3.1 读取灰度图像并绘制直方图

本例中,我们读取一张灰度图像,并用Matplotlib绘制其直方图:

from PIL import Image
import matplotlib.pyplot as plt

# 加载灰度图像
im = Image.open('lena.png').convert('L')

# 获取直方图数据
hist = im.histogram()

# 绘制直方图
plt.plot(hist)
plt.show()

上述代码中,我们首先使用Image.open()方法打开一个图像文件,然后将其转换为灰度图像。接着,调用im.histogram()获取图像的灰度直方图数据,并使用matplotlib库中的plot()方法绘制直方图。

3.2 读取彩色图像并分别绘制各色道直方图

本例中,我们读取一张彩色图像,并分别绘制其红、绿、蓝三个通道的直方图:

from PIL import Image
import matplotlib.pyplot as plt

# 加载彩色图像
im = Image.open('lena.png')

# 获取各通道直方图数据
hist_r = im.histogram()[:256]
hist_g = im.histogram()[256:512]
hist_b = im.histogram()[512:]

# 绘制各通道直方图
plt.plot(hist_r, color='r', label='R')
plt.plot(hist_g, color='g', label='G')
plt.plot(hist_b, color='b', label='B')
plt.legend()
plt.show()

上述代码中,我们首先使用Image.open()方法打开一个图像文件,然后调用im.histogram()获取图像的各颜色通道直方图数据,分别存储在hist_rhist_ghist_b三个列表中。最后,使用matplotlib库中的plot()方法绘制各颜色通道的直方图,并使用legend()方法添加图例。