LoginSignup
katsuki5080
@katsuki5080

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

npzに圧縮されているnumpy配列を画像として表示したいです。どうすればいいですか?

以下名前で保存されている配列を読みこみ画像として表示または保存したいです。

dec_iter_10000.npz

以下コード書いてみたのですが、エラーが出ます。
どうすればいいでしょうか?教えていただきたいです。

コード

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
#from PIL import Image

a = np.load('./result_facade/dec_iter_10000.npz')
#print(a)
plt.imshow(a)
ply.show()

#im = Image.fromarray(a)
#im.save("a.jpg")

エラー

TypeError: Image data of dtype <U21 cannot be converted to float
0

3Answer

npzには複数の配列を格納することが出来ます。aNpzFileオブジェクトという辞書型のようなものになっているはずです。

list(a.iteritems())

を実行してみてください。(キー,配列)のリストを取り出せると思います。

1

Comments

  1. @katsuki5080

    Questioner
    回答ありがとうございます!
    実行した結果、キーと配列を取り出せました。これを指定して出力する感じですか?
  2. @katsuki5080

    Questioner
    よろしければ、指定して画像を出力するやり方も教えていただきたいです。
  3. 上記を実行した結果中身の配列がどうなっているかがわからないのでそこまではコメントできません。
a = np.load('./result_facade/dec_iter_10000.npz')
a = a.astype(np.float64)

などとしてみたらどうでしょうか?

0

Comments

  1. @katsuki5080

    Questioner
    回答ありがとうございます。ダメでした。

    ```
    AttributeError: 'NpzFile' object has no attribute 'astype'
    ```

    と表示されます。

ロードに失敗していないか確認してみるのはいかがでしょう。

a = np.load('./result_facade/dec_iter_10000.npz')
assert a is not None
0

Comments

  1. @katsuki5080

    Questioner
    回答ありがとうございます。ロードはできてました。
  2. どのような内容がロードされていたか検証してみてはいかがでしょうか。
    `float`になるはずのないものがロードされていたなら、間違っているのはプログラムではなくファイルの内容(あるいはロード機構内部?)になります。
    バグの所在がプログラムかデータかの切り分けを行うということです。

Your answer might help someone💌