11

3,076,568 個のバイナリ値 (1 と 0) の NumPy 配列があります。これを行列に変換してから、Python でグレースケール画像に変換したいと思います。

ただし、配列を 1,538,284 x 1,538,284 マトリックスに再形成しようとすると、メモリ エラーが発生します。

一意性/データを失うことなく画面に収まる画像になるように、マトリックスのサイズを小さくするにはどうすればよいですか?

さらに、どうすればグレースケール画像に変換できますか?

ヘルプやアドバイスをいただければ幸いです。ありがとうございました。

4

4 に答える 4

22

「バイナリ値」の配列はバイト配列ですか?

その場合は、サイズを変更した後に( Pillowを使用して) 実行できます。

from PIL import Image
im = Image.fromarray(arr)

そして、それim.show()を見ること。

配列に 0 と 1 (1 ビット深度または b/w) しかない場合は、それを 255 に乗算する必要がある場合があります。

im = Image.fromarray(arr * 255)

ここに例があります:

>>> arr = numpy.random.randint(0,256, 100*100) #example of a 1-D array
>>> arr.resize((100,100))
>>> im = Image.fromarray(arr)
>>> im.show()

ランダム画像

編集(2018):

この質問は 2011 年に作成され、Pillow はmode='L'、ロード時にパラメーターを使用する必要があるため変更されましたfromarray

また、以下のコメントでも必要であると言われarr.astype(np.uint8)ていましたが、テストしていません

于 2011-10-08T05:25:33.920 に答える
11

PIL を使用する必要はありません。pyplot を使用して配列を直接プロットできます (以下を参照)。ファイルに保存するには、plt.imsave('fname.png', im).

ここに画像の説明を入力

以下のコード。

import numpy as np
import matplotlib.pyplot as plt

x = (np.random.rand(1754**2) < 0.5).astype(int)

im = x.reshape(1754, 1754)
plt.gray()
plt.imshow(im)

plt.show(im)新しいウィンドウに画像を表示するために使用することもできます。

于 2011-10-08T10:56:05.450 に答える
3

scipy.misc.toimageとでそれを行うことができますim.save("foobar.png"):

#!/usr/bin/env python

# your data is "array" - I just made this for testing
width, height = 512, 100
import numpy as np
array = (np.random.rand(width*height) < 0.5).astype(int)
array = array.reshape(height, width)

# what you need
from scipy.misc import toimage

im = toimage(array)
im.save("foobar.png")

を与える

ここに画像の説明を入力

于 2015-12-30T16:16:23.450 に答える