フォルダ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)
できない、とはなにがどうなってどういうふうにできないのか説明しよう
回答1件
あなたの回答
tips
プレビュー