这是我用什么RGB巴纽:
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)
Nowever,请注意,这取决于类型png格式的;例如,参照http://www.schaik.com/pngsuite/pngsuite_bas_png.html测试文件,并为basn2c16.png
这是“3x16位RGB颜色”,将打印输出:
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 ...
但是,如果你使用一个索引/ palleted 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来分隔并没有意义。
最后,如果它是一个RGBA png格式一样basn6a16.png
,你会得到阿尔法以及:
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缩放矩阵值,但是,你应该确保矩阵是为正确的格式...
http://stackoverflow.com/问题/ 2262100/rgb-int-to-rgb-python – PeteyPii
@PeteyPii这对我有什么帮助?我希望像素信息的形式为(0.1454,0.4572,1,1),当然我可以将它归一化,但我正在寻找一种更好的方法来使用Pillow本身。 –
哦,我误解了你的问题。您应该明确说明您在问题中的含义。 – PeteyPii