Python 理解枕头中的柱状图

Python 理解枕头中的柱状图,python,histogram,pillow,Python,Histogram,Pillow,从文档中: im.histogram()=>列表 返回图像的直方图。直方图作为列表返回 像素计数,源图像中的每个像素值一个。如果 图像有多个波段,所有波段的直方图均为 连接(例如,“RGB”图像的直方图包含 768个值) 我知道红色有256个值,绿色有256个值,蓝色有256个值(256*3=768) 产生: 0 329 1 145 ... (skipping some) 256 460 ... (skipping some) 767 3953 我的问题是:这是否意味着有: 329个像素,其值

从文档中:

im.histogram()=>列表 返回图像的直方图。直方图作为列表返回 像素计数,源图像中的每个像素值一个。如果 图像有多个波段,所有波段的直方图均为 连接(例如,“RGB”图像的直方图包含 768个值)

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

产生:

0 329
1 145
... (skipping some)
256 460
... (skipping some)
767 3953
我的问题是:这是否意味着有:
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等 这就是我应该如何读取输出的方式吗?

我还没有测试,但从文档中,文字似乎表明直方图仅适用于每个通道(例如,红色、绿色、蓝色)

如果图像有多个波段,则显示所有波段的直方图 连接的(例如,“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

不,您不知道有多少像素(例如)R=0、g=0、B=0。 这需要一个大约有1600万条的柱状图

你只知道有多少个R=0,有多少个G=0,有多少个B=0,这些都是独立的


R=0像素完全可能有大量不同的G和B。如果模式为RGB打开图像,768平均值为红灰列表[0-255像素nums]+绿灰列表[0-255像素nums]+蓝灰列表[0-255像素nums]

im是由RGB生成的图像对象

在[59]中:x=reduce(λx,y:x+y,im.histogram())

In[60]:x Out[60]:47191725

In[61]:im.size Out[61]:(47313325)

In[62]:4731*3325 Out[62]:15730575

In[63]:4731*3325*3 Out[63]:47191725

在[64]中:

或其他方式:

r、 g,b=im.split()

len(右直方图())=256

len(g.直方图())=256


len(b.histogram())=256

鉴于文档中提到了jack的顺序,我将生成3张不同的原色图片,并查看直方图函数的输出。谢谢,这听起来是个好主意。不过,看看顺序意味着什么还是很有意思的。我相信如果你想研究源代码,你可以建立实际的顺序,但有时最简单的方法是最好的。BWT当你弄明白了,把你的答案贴回这里。@PeterM:看起来数据是每个频道的,请看下面voithos的答案。谢谢,我的专业数学不及格<代码>256^3
!=<代码>256*3
谢谢,这是一个非常清楚的答案。我将分别看每种颜色。
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