2016-06-01 13 views
3

グレースケール画像を表す0〜1の範囲の値の2Dナンシー配列があるとします。これをPIL Imageオブジェクトに変換するにはどうしたらいいですか?これまでの試みでは、非常に奇妙な散乱画素や黒い画像が得られました。上記のコードでグレースケール値の2次元ナプシー配列をPIL画像に変換する

for x in range(image.shape[0]): 
    for y in range(image.shape[1]): 
     image[y][x] = numpy.uint8(255 * (image[x][y] - min)/(max - min)) 

#Create a PIL image. 
img = Image.fromarray(image, 'L') 

、numpyのアレイ画像を(画像[X] [Y] - 分)によって正規化された/(最大 - 最小)ので、すべての値が1の範囲0でありそしてそれは255を掛けて8ビット整数にキャストします。理論的には、モードLのImage.fromarrayをグレースケール画像に変換する必要がありますが、その結果は散在した白いピクセルのセットになります。

+1

最新のバージョンの['Pillow'](https://pillow.readthedocs.org/)を使用していますか、維持されているPILのフォークですか、元のPILを使用していますか? – MattDMo

+0

+ MattDMo私は最近のバージョンのPillowを使用していますが、特にPython 3.4を使用しています –

+1

あなたの質問を投稿して、これまでに試したことを投稿してください。例入力、予想出力、実際の出力もしあれば)、**フルテキスト**にエラーやトレースバックが含まれています。 – MattDMo

答えて

1

あなたが疑問に思ったら、PILを使用してグレースケール画像を取得します。

このような場合は、私は答えが間違っていると思う私

import numpy as np 
from PIL import Image 

# Creates a random image 100*100 pixels 
mat = np.random.random((100,100)) 

# Creates PIL image 
img = Image.fromarray(mat, 'L') 
img.show() 
+3

私はこれを試して、非常に明白な画像のアーチファクトを得ました。 - 7ピクセル程度の目に見える垂直バーがありました。ピローの最新バージョンがまっすぐに壊れている可能性はありますか? –

1

のために働いていた次の255

することにより、各ピクセルを乗算する必要はありません。 Image.fromarray(____、 'L')関数は、0から255までの整数の配列でのみ正しく動作すると思われます。これにはnp.uint8関数を使用します。

これは、グラデーションを作成しようとするとわかります。

import numpy as np 
from PIL import Image 

# gradient between 0 and 1 for 256*256 
array = np.linspace(0,1,256*256) 

# reshape to 2d 
mat = np.reshape(array,(256,256)) 

# Creates PIL image 
img = Image.fromarray(np.uint8(mat * 255) , 'L') 
img.show() 

import numpy as np 
from PIL import Image 

# gradient between 0 and 1 for 256*256 
array = np.linspace(0,1,256*256) 

# reshape to 2d 
mat = np.reshape(array,(256,256)) 

# Creates PIL image 
img = Image.fromarray(mat , 'L') 
img.show() 

対きれいなグラデーション

は、アーチファクトの同じ種類を持って行います。

関連する問題