これは、私はRGBの.PNGのために使っていたものです。
Nowever
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を参照してください、そして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ビットの場合と同様です。この場合、我々はフロート0.0〜1.0の範囲を取得するために255でnumpy.divide
でデータをスケーリングする必要があります...
あなたはインデックス付き/ 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で割ることは意味を持ちません。
それはbasn6a16.png
ようpngのRGBAだ場合は最後に、あなたにもアルファを取得します:
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)にしたいと思います。もちろん、私はそれを正規化することができますが、ピロー自体を使ってより良い方法を探しています。 –
ああ、私はあなたの質問を誤解しました。質問の意味を正確に明確にする必要があります。 – PeteyPii