前提・実現したいこと
様々なサイズの画像が格納されているフォルダの中から、特定のサイズの画像のみ取り出し、別フォルダへ移動したいと考えているのですが、
そのような場合はどうすればよいか教えていただけるととても助かります。
調べたところ、os.listdirでサイズごとのソートはできるようですが、別フォルダへの移動方法がわかりませんでした。
該当のソースコード
以下のコードで、フォルダ内のすべての画像のサイズと枚数は特定できました。
#train, testフォルダ内の画像サイズを一括取得 import glob import os import cv2 import sys # 引数は画像のファイルパス # 画像を読み込み、解像度情報を返す関数 def get_resolution(filepath): img = cv2.imread(filepath) # 画像ファイルの読み込みに失敗したらエラー終了 if img is None: print("Failed to load image file.") sys.exit(1) # カラーとグレースケールで場合分け if len(img.shape) == 3: height, width, channels = img.shape[:3] else: height, width = img.shape[:2] channels = 1 return width,height,channels # 引数はディレクトリ # ディレクトリ内のファイルの解像度をカウントする def count_resol(directory): print(directory) files = glob.glob(directory) d={} for file in files: width,height,channels = get_resolution(file) info = str(width) + "," + str(height) + "," +str(channels) d.setdefault(info,0) d[info] += 1 print(d) # 対象ディレクトリを指定する,複数のディレクトリを指定可能 directory = ["./train/NORMAL/*jpeg", "./test/NORMAL/*.jpeg"] for d in directory: count_resol(d)
###補足情報
以下のコードを追記してみたのですが、うまくいきませんでした。
お手数をお掛けしますが、どのように修正したら良いかご存じの方がいらっしゃいましたら教えていただけるととても助かります。
こちらの質問も参考にしてみました。
https://teratail.com/questions/149325
import glob import os import re import shutil #画像の保存名に'1536_496'が入っているものを別フォルダに移動 input_dir = './NORMAL_resize_rename_10000' # 移動元ディレクトリ output_dir = './NORMAL_resize_rename_copy_10000' # 移動先ディレクトリ # 出力ディレクトリが存在しない場合、作成する。 os.makedirs(output_dir, exist_ok=True) for path in glob.glob(input_dir + "/*.jpeg"): img = Image.open(path) # 画像を path から読み込み match = re.search('1536_496', input_dir + "/*.jpeg") if match: move('./NORMAL_resize_rename_10000/' + file, './NORMAL_resize_rename_copy_10000/')
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。