質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

8985閲覧

'list' object has no attribute 'read'

yep

総合スコア45

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/12/30 01:49

#やりたいこと
連番画像を読み込み、ndarray形式に変換し、テキストファイルに保存したいと考えています。
#試したこと

from PIL import Image import numpy as np import glob file = glob.glob('./Desktop/Cat/*.jpg') for f in file: image = np.array(Image.open(file).convert('RGB')) np.savetxt('./Desktop/image.txt', image, fmt='%.1e')
Traceback (most recent call last): File "/home/hoge/.local/lib/python3.6/site-packages/PIL/Image.py", line 2613, in open fp.seek(0) AttributeError: 'list' object has no attribute 'seek' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "./Desktop/image_data.py", line 7, in <module> image = np.array(Image.open(files).convert('RGB')) File "/home/yudai/.local/lib/python3.6/site-packages/PIL/Image.py", line 2615, in open fp = io.BytesIO(fp.read()) AttributeError: 'list' object has no attribute 'read'

関連質問として下記がありました。
Pythonで複数画像データを配列化して保存する方法
#環境
python 3.6.7
numpy 1.15.4
ubuntu 18.04

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

提示されてるエラーはいずれも、fp という変数にかかるエラーですが、提示されてるコードにはfpがありませんね

fpはどういう定義になってるんでしょうか

投稿2018/12/30 02:24

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/12/30 02:43 編集

ならそのfileと言うのは何者か、fileというものに、あなたのコードではなにを当てられているのかを調べましょう そのエラーはどこからなぜ発生してるのかを探っていくというのもコードの理解をするのに役立つものと思います #まちょっと遠回りになってしまいますが
guest

0

ベストアンサー

image = np.array(Image.open(file).convert('RGB'))ではなく
image = np.array(Image.open(f).convert('RGB'))です。

また、ループ中でimageはどんどん上書きされています。
複数ファイル分を1テキストファイルとして保存するには、関連質問の手法などで、別の配列に追加していったあとにファイル保存する必要があります。

投稿2018/12/30 02:08

編集2018/12/30 02:11
can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yep

2018/12/30 02:31

fで試したのですが、OSError: cannot identify image fileとなりファイルが見つからないエラーに遭遇しました。
can110

2018/12/30 02:34

当方環境では正常に動作します。 エラーの発生する画像ファイルは画像ビューワーなどで正常にみえますか?
yep

2018/12/30 02:41

画像ビューワーでは正常に見えます。UserWarningのため、エラーの原因とは考えていなかったのですが、 UserWarning: Possibly corrupt EXIF data. Expecting to read 18350080 bytes but only got 0. Skipping tag 0 " Skipping tag %s" % (size, len(data), tag)) /home/yudai/.local/lib/python3.6/site-packages/PIL/TiffImagePlugin.py:771: UserWarning: Corrupt EXIF data. Expecting to read 12 bytes but only got 6. warnings.warn(str(msg)) Traceback (most recent call last): File "./Desktop/image_data.py", line 7, in <module> image = np.array(Image.open(f).convert('RGB')) File "/home/yudai/.local/lib/python3.6/site-packages/PIL/Image.py", line 2657, in open % (filename if filename else fp)) OSError: cannot identify image file './Desktop/Cat/666.jpg' と出力されます。
can110

2018/12/30 02:48

とりあえずその「666.jpg」(他にも同様エラー発生するファイル)を取り除くと読込までは動作するかと思いますがどうでしょう? EXIFが原因であれば「jpg EXIF 除去」なりで検索してみて、除去してみてください。
yep

2018/12/30 03:15

写真を変えて再度試したのですが、 File "./Desktop/image_data.py", line 11, in <module> np.savetxt('./Desktop/image.txt', c, fmt='%.1e') File "/home/yudai/.local/lib/python3.6/site-packages/numpy/lib/npyio.py", line 1335, in savetxt "Expected 1D or 2D array, got %dD array instead" % X.ndim) ValueError: Expected 1D or 2D array, got 0D array instead が出ます。しかし、.convert('RGB'))ではなく.convert('L'))ならばエラーなく変換できました。
can110

2018/12/30 03:28 編集

savetxtは2次元を超える配列は扱えませんので、質問者様が関連質問にあげられているように次元削減する必要があります。 また、提示コードでは、最後の画像しか書き込まれないという問題があります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問