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

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

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

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

Q&A

解決済

1回答

3912閲覧

三次元配列の画像データを二次元配列のデータに変換しようとするとエラーが出る。

matt17

総合スコア16

Python 3.x

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

0グッド

0クリップ

投稿2018/09/06 06:09

編集2018/09/06 06:12

ダウンロードした画像をリサイズして他のファイルに保存したい

コーディネートを5つのクラスに分類する機能を作っています。

import os import shutil import numpy as np from PIL import Image from skimage import data from sklearn.cluster import KMeans # 1. 3次元配列の画像データを2次元配列のデータに変換 feature = np.array([data.imread('./img/img_convert') for path in os.listdir('./img/img_convert')]) feature = feature.reshape(len(feature), -1).astype(np.float64) # 2. 学習(5種類のグループにクラスタリングする) model = KMeans(n_clusters=5).fit(feature) # 3. 学習結果のラベル labels = model.labels_ # 4. 学習結果(クラスタリング結果の表示 + ラベルごとにフォルダ分け) # ./img_group 以下に画像を分けて保存する for label, path in zip(labels, os.listdir('./img/img_convert')): os.makedirs("./img/img_group/{label}", exist_ok=True) shutil.copyfile("./img/img_origin/{path.replace('.jpg', '')}", "./img/img_group/{label}/{path.replace('.jpg', '')}") print(label, path)

発生している問題・エラーメッセージ

[Errno 21] Is a directory: './img/img_convert'

これはどのようなことなのでしょうか。
全くの初心者なので申し訳ありませんが、ご教授ください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Python

feature = np.array([data.imread('./img/img_convert') for path in os.listdir('./img/img_convert')])

せっかく os.listdir を使ってるんですから、その結果を利用しましょう。

Python

1feature = np.array([data.imread(path) for path in os.listdir('./img/img_convert')])

コメントを受けて

しかし、実際に実行すると、

[Errno 2] No such file or directory: '20180906072517986_276.jpg'
のようなエラーが発生します。

os.listdir は単にファイル名だけを返すんでした。不便ですね。

Python

1search_dir = './img/img_convert' 2feature = np.array([ 3 data.imread('{}/{}'.format(search_dir, path)) 4 for path in os.listdir(search_dir) 5])

これでどうでしょう。

投稿2018/09/06 06:14

編集2018/09/06 06:57
LouiS0616

総合スコア35660

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

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

matt17

2018/09/06 06:20

回答ありがとうございます。 そのようにすると画像の読み込みまではうまく行きました。 しかし、実際に実行すると、 [Errno 2] No such file or directory: '20180906072517986_276.jpg' のようなエラーが発生します。 これはどのようなことなのでしょうか。
matt17

2018/09/06 07:04

回答ありがとうございます。 import os import shutil import numpy as np from PIL import Image from skimage import data from sklearn.cluster import KMeans # 1. 3次元配列の画像データを2次元配列のデータに変換 search_dir = './img/img_convert' feature = np.array([ data.imread('{}/{}'.format(search_dir, path)) for path in os.listdir(search_dir) ]) feature = feature.reshape(len(feature), -1).astype(np.float64) # 2. 学習(5種類のグループにクラスタリングする) model = KMeans(n_clusters=5).fit(feature) # 3. 学習結果のラベル labels = model.labels_ # 4. 学習結果(クラスタリング結果の表示 + ラベルごとにフォルダ分け) # ./img_group 以下に画像を分けて保存する for label, path in zip(labels, os.listdir('./img/img_convert')): os.makedirs("./img/img_group/{label}", exist_ok=True) shutil.copyfile("./img/img_origin/{path.replace('.jpg', '')}", "./img/img_group/{label}/{path.replace('.jpg', '')}") print(label, path) 上記のようにして実行すると、 [Errno 21] Is a directory: './img/img_convert/.ipynb_checkpoints' というエラーが発生します。 しかし、ipynb.checkpointsという文字はどこにも入っておりません。
LouiS0616

2018/09/06 07:11

隠しファイルに引っかかってますね。 読み込みたい画像の形式は何でしょうか?
matt17

2018/09/06 07:22

jpgです。
LouiS0616

2018/09/06 07:52

それならglobモジュールを使った方が楽そうです。 feature = np.array([ data.imread(path) for path in glob.glob('./img/img_convert/*.jpg') ])
matt17

2018/09/06 07:59

ありがとうございます。 先ほどエラーが出ていたところは大丈夫でした。 import os import shutil import numpy as np from PIL import Image from skimage import data from sklearn.cluster import KMeans import glob # 1. 3次元配列の画像データを2次元配列のデータに変換 search_dir = './img/img_convert' feature = np.array([ data.imread(path) for path in glob.glob('./img/img_convert/*.jpg') ]) feature = feature.reshape(len(feature), -1).astype(np.float64) # 2. 学習(5種類のグループにクラスタリングする) model = KMeans(n_clusters=5).fit(feature) # 3. 学習結果のラベル labels = model.labels_ # 4. 学習結果(クラスタリング結果の表示 + ラベルごとにフォルダ分け) # ./img_group 以下に画像を分けて保存する for label, path in zip(labels, os.listdir('./img/img_convert')): os.makedirs("./img/img_group/{label}", exist_ok=True) shutil.copyfile("./img/img_origin/{path.replace('.jpg', '')}", "./img/img_group/{label}/{path.replace('.jpg', '')}") print(label, path) 実行すると、 [Errno 2] No such file or directory: "./img/img_origin/{path.replace('.jpg', '')}" なってしまいます。 なんども申し訳ございません。
LouiS0616

2018/09/06 08:01

fが抜けてます。 何か参考にコードを書いているのでしたら、まずタイプミスを疑ってください。
matt17

2018/09/06 08:07

ご指摘ありがとうございます。 shutil.copyfile(f"./img/img_origin/{path.replace('.jpg', '')}", f"./img/img_group/{label}/{path.replace('.jpg', '')}") このように変えると、 SyntaxError: invalid syntax とエラーが出ます。
LouiS0616

2018/09/06 08:26

f-string記法はPython3.6以降の機能です。 使えないということは、ご利用のPythonのバージョンが古いのでしょう。 Pythonのバージョンを上げるか、代わりに str.format を使うと良いです。 https://qiita.com/Morio/items/b79ead5f881e6551d9e1
matt17

2018/09/06 13:27

長らくありがとうございました。 無事解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問