了解Pillow中的直方图()

emh*_*emh 3 python histogram pillow

来自文档:

im.histogram()=>列表

返回图像的直方图.直方图作为像素计数列表返回,对应于源图像中的每个像素值.如果图像具有多于一个波段,则所有波段的直方图被连接(例如,"RGB"图像的直方图包含768个值).

据我所知,红色有256个值,绿色有256个,蓝色有256个(256*3 = 768).

for i, value in enumerate(im.histogram()):
    print i, value
Run Code Online (Sandbox Code Playgroud)

生产:

0 329
1 145
... (skipping some)
256 460
... (skipping some)
767 3953
Run Code Online (Sandbox Code Playgroud)

我的问题是:这是否意味着有:
329个像素是有值R = 0, G = 0, B = 0和
145个像素是有值R = 1, G = 0, B = 0和
460个像素是有值R = 256, G = 1, B = 0和
3953点的像素是有一个价值R = 256, G = 256, B = 256等等?

这是我应该如何阅读输出?

voi*_*hos 9

我没有测试过,但是从文件,措辞似乎表明,直方图仅适用于每个通道(如红,绿,蓝)分别.

如果图像具有多于一个波段,则所有波段的直方图被 连接(例如,"RGB"图像的直方图包含768个值).

所以,不,你给出的例子并不正确.768价值观就是256 * 3,这是有可能的红色值的数量,加上可能的绿色值的数量,加上可能的蓝色值的数目独立.它并不代表红色,绿色和蓝色的所有可能组合,而不是256 ^ 3 == 16777216.

从我所看到的,您的示例直方图值的解释应该是:

329  pixels with value of R = 0, G = ?, B = ? and
145  pixels with value of R = 1, G = ?, B = ? and
...
460  pixels with value of R = ?, G = 1, B = ? and
...
3953 pixels with value of R = ?, G = ?, B = 256
Run Code Online (Sandbox Code Playgroud)