Diary

Diary

日々学んだことをアウトプットする場として初めてみました

Image.fromarray で KeyError: ((1, 1, 3), '<f8')

PIL の Image.fromarray を使って ndarray から PIL オブジェクトを生成しようとした際、KeyError: ((1, 1, 3), '<f8') というエラーに遭遇しました。

エラー詳細

発生箇所

ここで用いた ndarray (matrix_image) は、GAN により生成したものです。

from PIL import Image

# ndarrayをPILオブジェクトにする
image = Image.fromarray(matrix_image)

エラーメッセージ

  File "/Users/kokoichi/.pyenv/versions/3.7.6/lib/python3.7/site-packages/PIL/Image.py", line 2813, in fromarray
    mode, rawmode = _fromarray_typemap[typekey]
KeyError: ((1, 1, 3), '<f8')

The above exception was the direct cause of the following exception:

解決策

Image.fromarrayは各ピクセルの値として0-255を要求しているのに対し、渡している値が0-1浮動小数点であることが原因。

値の範囲を揃えて、キャストしてから渡してあげる。

from PIL import Image

# PILオブジェクトにする
# 各ピクセル [0, 1]:float32 -> [0, 255]:uint8
matrix_image = (matrix_image*255.0).astype(np.uint8)
image = Image.fromarray(matrix_image)

おわりに

気づけば単純なことですが、慣れておらず少し時間がかかってしましました。