【问题标题】:How to get a list of float RGBA pixels values using Pillow?如何使用 Pillow 获取浮点 RGBA 像素值列表?
【发布时间】:2017-04-17 18:03:53
【问题描述】:

我想使用 Pillow python 模块获取浮点 RGBA 像素值列表。

目前我只能得到 RGBA 整数数据:

from PIL import Image

im = Image.open("Lenna.png")
im_alpha = im.convert('RGBA')
Pixels = list(im.getdata())

这会让我例如 ((226, 137, 125, 255), ...) 但是我不知道如何以浮点形式获取这些信息,例如 ((0.88627451, 0.537254902, 0.490196078, 1), ...)。

我该怎么做?

【问题讨论】:

  • @PeteyPii 这对我有什么帮助?我希望像素信息采用 (0.1454,0.4572,1,1) 的形式,当然我可以对其进行标准化,但我正在寻找一种更好的方法来使用 Pillow 本身。
  • 哦,我误解了你的问题。您应该明确说明您在问题中的意思。
  • 我不认为 PIL 将像素值存储在浮点数中。因为即使您确实设法将图像转换为type float,您也会得到像素值:255.0, 35.0, 168.0, 87.0,..... 等等。

标签: python pillow


【解决方案1】:

这是我用于 RGB .png 的内容:

from PIL import Image
import numpy

# http://www.schaik.com/pngsuite/basn2c16.png
im = Image.open('basn2c16.png')
#~ data = numpy.asarray(im)
data = numpy.array(im) # same as .asarray
print("Array dimensions: %s"%(repr(data.shape)))
data = data.astype(float)
print("[20, 30]=%s"%(repr(data[20, 30])))
print(data)
data = numpy.divide(data, 255.0)
print(data)

现在,请注意,这取决于 .png 的类型;例如,测试文件参见http://www.schaik.com/pngsuite/pngsuite_bas_png.html,对于“3x16 位 rgb 颜色”的basn2c16.png,打印输出为:

Array dimensions: (32, 32, 3)
[20, 30]=array([   8.,   90.,  156.])
[[[ 255.  255.    0.]
  [ 247.  255.    0.]
  [ 239.  255.    0.]
...
[[[ 1.          1.          0.        ]
  [ 0.96862745  1.          0.        ]
  [ 0.9372549   1.          0.        ]
  ..., 

因此,即使这是 16 位,这些值似乎也介于 0-255 之间,就像 8 位一样。在这种情况下,我们需要将 numpy.divide 的数据缩放为 255,以获得 0.0-1.0 的浮点范围 ...

但是,如果您使用索引/托盘 png basn3p08.png,您会得到:

Array dimensions: (32, 32)
[20, 30]=120.0
[[ 165.  165.  165. ...,  254.  254.  254.]
 [   8.    8.    8. ...,  248.  248.  248.]
....

所以现在矩阵内容不代表 RGB(A) 值,而是调色板中的索引,因此除以 255 没有任何意义。

最后,如果是像basn6a16.png 这样的 RGBA png,你也会得到 alpha:

Array dimensions: (32, 32, 4)
[20, 30]=array([   0.,   88.,  167.,   16.])
[[[ 255.  255.    0.    0.]
  [ 247.  255.    0.    0.]
...

同样,即使这是 16 位 png,值似乎也缩放为 255,因此除以 255 以获得浮点数是有意义的。

换句话说,使用numpy 和 PIL 缩放矩阵值相对容易,但是,您应该确保矩阵的格式正确...

【讨论】:

    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多