web-dev-qa-db-ja.com

numpy ndarrayをImageに書き込みます

Pythonでバイナリファイル(8ビットRGBタプル)を読み取って、変換を行ってから、PNG画像として書き込もうとしています。私は次のことをしています:

typeinfo = np.dtype('>i1' ) #read single bytes
data=np.fromfile(("f%05d.txt" %(files[ctr])),dtype=typeinfo)
data=np.reshape(data,[linesperfile,resX,3]) #reshape to size/channels

dataのタイプ情報を表示すると、次のように表示されます。

<type 'numpy.ndarray'>
(512L, 7456L, 3L)

次に、イメージを(インプレースで)操作し、その後イメージをファイルに書き込みます。現在、私は使用しています:

import PIL.Image as im
svimg=im.fromarray(data)
svimg.save(("im%05d"%(fileno)),"png")

しかし、それは私に次のエラーを与え続けます:

line 2026, in fromarray
raise TypeError("Cannot handle this data type")
TypeError: Cannot handle this data type

これを行う方法はありますか?

24
Cookie

Image符号なしバイトを必要とし、i1符号付きバイトを意味します。符号が無関係(すべての値が0〜127)の場合、これは機能します。

svimg=im.fromarray(data.astype('uint8'))

0〜255のフルレンジが必要な場合は、'uint8'全体を使用する必要があります。

45
Alex Martelli