フォルダ内の画像の幅をそろえる
フォルダ内にある全ての画像ファイルの幅を同じにします。
使った関数・メソッド
- os.listdir() : ディレクトリ内のファイルをリストに
- cv2.imread() : 画像ファイルの読み出し
- img.shape : 画像の高さ、幅、チャンネル数の取得
- cv2.resize() : 画像サイズの変更
- .split() : オブジェクトの分割
- cv2.imwrite() : 画像を保存する
環境
準備
画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、jupyter notebookファイル(***.ipynb)と同じディレクトリにフォルダ'photos'を作りその中に保存しました。4つの画像ファイルは800x533、1600x1068、 640x480、400x268とサイズがバラバラです。
コード
import os # osのインポート import cv2 # OpenCVのインポート dir_path = 'photos/' # 画像ファイルのあるフォルダの相対パス files = os.listdir(dir_path) # フォルダ内のファイルのリスト生成 width_resize = 200 # 変更後の画像幅 for i in files: # リスト中のファイル数だけ繰り返す img = cv2.imread(dir_path+i) # 画像の読み出し height, width, ch = img.shape # 画像の高さ、幅、チャンネル数の取得 height_resize = int(height*width_resize/width) # 変更後画像高さの計算 img_resize = cv2.resize(img,dsize=(width_resize,height_resize)) #画像サイズの変更 file_name = i.split('.')[0] # ファイル名から拡張子を除いた部分を取り出す file_extension = i.split('.')[-1] # ファイル名から拡張子を取得 cv2.imwrite(dir_path+file_name+'_resize.'+file_extension,img_resize) # 画像の保存
実行結果
リサイズされた画像が別名で保存されます。新しくできた4つの画像ファイルは200x133、200x133、 200x150、200x134と幅200pxにそろっています。