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

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

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

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

Q&A

解決済

1回答

1101閲覧

サブフォルダ内の画像の分割

xeno

総合スコア16

Python 3.x

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

0グッド

0クリップ

投稿2021/11/09 22:24

フォルダAの中にあるサブフォルダX_001~X_100内の画像を分割し別で用意したディレクトリないのサブフォルダに別名で保存したいです。
出来れば、保存先のサブフォルダは自動で作りたいです。
例:X_001のSSSS.jpgならX_001_afterのSSSS_1.jpgみたいな感じです。

画像の分割とサブフォルダの画像のリネームは単体ではできるのですが1つにできません。
やり方を教えていただきたいです。

画像の分割

from pathlib import Path from PIL import Image import cv2 import numpy as np def get_paths(input_dir, exts=None): paths = sorted([x for x in input_dir.iterdir()]) if exts: paths = list(filter(lambda x: x.suffix in exts, paths)) return paths # ディレクトリ内の指定した拡張子のファイルをすべて取得する。 input_dir = Path(r"./data/image/") # 出力先のディレクトリを作成する。 output_dir = Path(r"output") output_dir.mkdir(exist_ok=True) for path in get_paths(input_dir, exts=[".jpg", ".jpeg", ".png"]): # 画像を読み込む。 img = cv2.imread(str(path)) #print(img) size = (48, 48) # 分割後の大きさ rows = int(np.ceil(img.shape[0] / size[0])) # 行数 cols = int(np.ceil(img.shape[1] / size[1])) # 列数 chunks = [] for row_img in np.array_split(img, rows, axis=0): for chunk in np.array_split(row_img, cols, axis=1): chunks.append(chunk) #print(type(chunk)) cv2.imshow("chunk",chunk) cv2.waitKey(1000) print(type(chunk)) print(len(chunks)) # 保存する。 for i, chunk in enumerate(chunks): #save_path = output_dir / f"chunk_{i:02d}.png" #save_path = output_dir / f"{file_name}chunk_{i:02d}.png" #cv2.imwrite(str(save_path), chunk) # 結果を保存する。 #save_path = output_dir / path.name save_path = output_dir.name + str(i) + "_" + path.name saved_path = output_dir / save_path cv2.imwrite(str(saved_path), chunk)

画像のリネーム

import glob import os path = './data/image/' files = glob.glob(path+'**', recursive=True) count = 0 for i, f in enumerate(files): if os.path.isfile(f): count = count + 1 print(count) f_path = os.path.dirname(f) + '/' fname = 'camera_model_' + str(count) + '.jpg' os.rename(f, f_path + fname)

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

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

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

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

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

y_waiwai

2021/11/10 01:53

できない、とはなにがどうなってどういうふうにできないのか説明しよう
guest

回答1

0

自己解決

サブフォルダの名前を連番の数字にしたためfor文でpathを更新しながら行えた。

投稿2021/11/18 05:40

xeno

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問