Python 如何使用枕头获取浮点RGBA像素值列表?
我想使用python模块获得浮点RGBA像素值的列表 到目前为止,我只能获得RGBA整数数据:Python 如何使用枕头获取浮点RGBA像素值列表?,python,pillow,Python,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,
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),…)
我该怎么做呢?这是我用于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的类型;例如,有关测试文件,请参阅,对于“3x16位rgb颜色”,打印输出为:
数组维度:(32,32,3)
[20,30]=数组([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来缩放数据。用255除以得到一个浮点范围0.0-1.0
但是,如果使用索引/托盘png,则会得到:
数组维度:(32,32)
[20, 30]=120.0
[[ 165. 165. 165. ..., 254. 254. 254.]
[ 8. 8. 8. ..., 248. 248. 248.]
....
因此,现在矩阵内容并不表示RGB(A)值,而是调色板中的索引,因此用255除法没有任何意义
最后,如果是类似RGBA png的,您还将获得alpha:
数组维度:(32,32,4)
[20,30]=数组([0,88,167,16.])
[[[ 255. 255. 0. 0.]
[ 247. 255. 0. 0.]
...
同样,即使这是16位png,值也会被缩放到255,因此用255除以获得浮点值是有意义的
换句话说,使用numpy
和PIL缩放矩阵值相对容易,但是,您应该确保矩阵的格式正确…@peteypi这对我有什么帮助?我希望像素信息的格式为(0.1454,0.4572,1,1),当然我可以正常化它,但我正在寻找一种更好的方法来使用枕头本身。哦,我误解了你的问题。你应该明确你在问题中的意思。我不认为PIL以浮点形式存储像素值。因为即使你成功地将图像转换为类型float
,你也会得到pixel值为:255.0、35.0、168.0、87.0、…
等。