2016-11-25 17 views
2

Pillow Pythonモジュールを使ってfloat RGBAピクセル値のリストを取得したいと思います。Pillowを使用して浮動小数点RGBAピクセル値のリストを取得する方法は?

from PIL import Image 

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

これは、例えば、私を取得します((226、137、125、255)、...) を私は知りませんが。これまでのところ、私は唯一のRGBAの整数データを得ることができる

(0.88627451,0.537254902、0.490196078、1)などの浮動小数点形式でこの情報を取得する方法。

どうすればいいですか?

+1

http://stackoverflow.com/質問/ 2262100/rgb-int-to-rgb-python – PeteyPii

+1

@PeteyPiiこれはどのように私を助けますか?私はピクセル情報をフォーム(0.1454,0.4572,1,1)にしたいと思います。もちろん、私はそれを正規化することができますが、ピロー自体を使ってより良い方法を探しています。 –

+0

ああ、私はあなたの質問を誤解しました。質問の意味を正確に明確にする必要があります。 – PeteyPii

答えて

1

これは、私は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で行列値をスケーリングすることは比較的容易で、しかし、あなたは行列がそのための適切なフォーマットであることを確認する必要があり...

関連する問題