Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用枕头获取浮点RGBA像素值列表?_Python_Pillow - Fatal编程技术网

Python 如何使用枕头获取浮点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,

我想使用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),…)


我该怎么做呢?

这是我用于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、…
等。