配列を画像として保存する複数の方法(scipy.misc.toimageを含む)



Multiple Ways Save Arrays




この記事はもともとtoimage関数を書くことを意図していて、インターネット上で配列を画像として保存する方法がたくさんあることを発見したので、それらは一緒に編成されています。他の方法が参照されます: Numpy配列を画像として保存
ずんぐりした配列型の行列、それを画像としてディスクに書き込む方法は?どの画像形式でもかまいません(PNG、JPEG、BMP ...)The best solutionYou can use scipy.misc, the code is as follows: import scipy.misc scipy.misc.imsave('outfile.jpg', image_array) scipyちなみにここに scipy.misc.toimage 関数 関数の元の形式は次のとおりです。 scipy.misc.toimage(* args、** kwds)この関数はscipy1.2.0バージョンで削除され、PillowのImage.formarrayに置き換えられます。 * args:入力配列 ** kwds:入力されたキーワード
機能は、numpy配列配列を入力し、PILイメージを出力することです。 この機能は、PILがインストールされた後にのみ使用できます。出力PILダイアグラムのモードは、アレイの形状と仲間モードこれらのキーワード。
2次元配列の場合、palが有効な(N、3)バイトタイプのRGB値であり、その値が(0、255)の場合、mode = 'P'、それ以外の場合はmode = 'L'です。 「F」または「I」。この場合、浮動小数点数や整数の配列が作成されます。 3D配列の場合、「channel_axis」パラメータは、配列のどの次元がチャネルデータを保持するかを示します。 3D配列の場合、特定の次元が3の場合、デフォルトのモードはRGBまたはYCbCrです。 numpy配列は2次元または3次元である必要があります。 関数は次のように書くことができますscipy.misc.toimage(( ARR 高= 255 低= 0 Cmin =なし Cmaxはありません PAL =なし モード=なし channel_axis =なし )。

for i in range(20): image_array=mnist.train.images[i,:] image_array=image_array.reshape(28,28) filename=save_dir+'mnist_train_%d.jpg' % i scipy.misc.toimage(image_array,cmin=0.0,cmax=1.0).save(filename)バージョンはすべての画像を正規化して、最小(データ)が黒になり、最大(データ)が白になるようにします。データが正確なグレーレベルまたは正確なRGBチャネルである必要がある場合、解決策は次のとおりです。

RGBA
  1. インポートscipy.misc
  2. scipy.misc.toimage(image_array、cmin =00、cmax = ...)。save('outfile.jpg')。

((SciPyには、入力と出力のためのいくつかの実用的なモジュールが含まれています。これらのモジュールのうち、ioとmiscの2つを以下に紹介します。配列を画像として保存
画像を操作する必要があり、操作を実行するには配列オブジェクトを使用する必要があるため、配列を画像ファイルとして直接保存すると非常に便利です。
imsave()関数はscipy.miscモジュールからロードできます。配列imをファイルに保存するには、次のコマンドを使用できます作る:
scipy.miscからimportimsave imsave( 'test.jpg'、im))私のプログラムでのこの例はこれです:matplotlib

2番目の解決策

使用する PIL



numpy配列 'A'が与えられた:

opencv
  1. からPILインポート画像
  2. im = Image.fromarray(A)
  3. im.save('your_file.jpeg')。

'jpeg'は、ほぼすべての形式に置き換えることができます。フォーマットの詳細については ここに 詳細



3番目の方法

純粋なPython(2&3)、サードパーティの依存関係のコードスニペットはありません。

この関数は、圧縮されたトゥルーカラー(ピクセルあたり4バイト)を書き込みます

 PNG。

|_+_|
  1. def write_png(バフ、幅、高さ)
  2. '' 'buf:Python3.xではbytesまたはbytearrayである必要があります。
  3. Python2.xの通常の文字列。
  4. '' '
  5. インポートzlib、struct
  6. #縦線の順序を逆にして、先頭にnullバイトを追加します
  7. width_byte_4 =幅*4
  8. raw_data =b ''.join(b ' x00'+ buf [span:span + width_byte_4]
  9. ためにスパンrange((高さ-1)* width_byte_4、-1、-width_byte_4))
  10. def png_pack(png_tag、データ)
  11. チャンクヘッド= png_tag +データ
  12. 戻る(struct.pack('!私'、len(データ))+
  13. チャンクヘッド+
  14. struct.pack('!私'0xFFFFFFFF&zlib.crc32(chunk_head)))
  15. 戻る b ''.join([
  16. b ' x89PNG r n x1a n'
  17. png_pack(b「IHDR」、struct.pack('!2I5B'、 幅高さ、86000))、
  18. png_pack(b'IDAT '、zlib.compress(raw_data、9))、
  19. png_pack(b「IEND」b '')])

...データは、次のようにバイナリで開いたファイルに直接書き込む必要があります。



  1. データ= write_png(buf、6464)。
  2. 開いた('my_image.png''wb')。なのでfd:
  3. fd.write(data)

4番目の方法

使用

|_+_|

  1. インポートmatplotlib
  2. matplotlib.image.imsave('name.png'、配列)

matplotlib 1.3.1に適用されますが、下位バージョンが有効かどうかはわかりません。ドキュメンテーション:

  1. 引数:
  2. * fname *:
  3. ファイル名へのパスを含む文字列、またはPythonファイルのようなオブジェクト。
  4. *フォーマット*の場合です*なし*そして* fname *です文字列、出力
  5. フォーマットです演繹からファイル名の拡張子。
  6. * arr *:
  7. MxN(輝度)、MxNx3(RGB)またはMxNx4(RGBA)アレイ。

python、image、numpy

5番目の方法

matplotlibを使用する場合は、次のこともできます。

  1. インポート matplotlib.pyplot なので plt
  2. plt.imshow((マトリックス)。#ニーズ あります とともに 注文
  3. plt.savefig((ファイル名)。

これにより、(画像自体ではなく)プロットが保存されます。

python、image、numpy

6番目の方法

python

http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html )。

  1. インポートcv2
  2. インポートnumpyなので例えば
  3. cv2.imwrite('filename.png'、np.zeros((1010))))

このライブラリは、保存よりも多くの処理を行う必要がある場合に役立ちます。

参照