Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

フォルダ内の画像の幅をそろえる

フォルダ内にある全ての画像ファイルの幅を同じにします。

使った関数・メソッド
  • os.listdir() : ディレクトリ内のファイルをリストに
  • cv2.imread() : 画像ファイルの読み出し
  • img.shape : 画像の高さ、幅、チャンネル数の取得
  • cv2.resize() : 画像サイズの変更
  • .split() : オブジェクトの分割
  • cv2.imwrite() : 画像を保存する
環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
  • OpenCV 4.0.0
準備

画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、jupyter notebookファイル(***.ipynb)と同じディレクトリにフォルダ'photos'を作りその中に保存しました。4つの画像ファイルは800x533、1600x1068、 640x480、400x268とサイズがバラバラです。
f:id:T_A_T:20190414163619p:plain

コード
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にそろっています。

f:id:T_A_T:20190414163722p:plain

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村