このページでは、以下の画像のように指定画像を縦横比(アスペクト比)を維持したまま、指定したサイズにリサイズする方法をご紹介します。
ベース画像の縦横サイズとリサイズ後の縦横サイズに応じて上下、左右は黒塗りされるような仕様になっています。
AIに画像を入力する際は画像サイズをそろえる必要がありますので、ばらばらのサイズの画像を歪みなく入力したい際などにぜひご活用ください。
今回はそういったAI利用のシーンを想定して、フォルダ内にあるすべての画像に対してこの処理を実行してみようと思います。
それではさっそくやっていきましょう。
※今回はPython上でOpenCVというライブラリを使用していきます。
インストールしていない人は、まずはインストール作業から始めましょう。
★Pythonのインストール方法以下から!
★openCVのインストール方法以下から!
使用する画像サンプルの紹介
今回は以下のようにあるフォルダの中に保存している8つのカラー画像に対して処理を実施していきます。
上の例では同じサイズの画像しかありませんが、どんなサイズの画像が混じっていても問題ありません。
これらの画像をリサイズ後に別フォルダに保存していこうと思います。
縦横比を維持したまま、指定サイズに一括リサイズする方法
それではさっそくですが、サンプルコードのご紹介です。
※先ほどの画像保存フォルダ上で実行することを想定して書いています。
#ライブラリのインポート
import cv2
import numpy as np
import os
import glob
#新しいフォルダ名
new_fol='new_pic'
#新しいフォルダを作成
os.makedirs(new_fol, exist_ok=True)
#画像ファイル一覧を取得
pics=glob.glob('*.jpg')
#調整後サイズを指定(横幅、縦高さ)
size=(256,256)
#リサイズ処理開始
for pic in pics:
base_pic=np.zeros((size[1],size[0],3),np.uint8)
pic1=cv2.imread(pic,cv2.IMREAD_COLOR)
h,w=pic1.shape[:2]
ash=size[1]/h
asw=size[0]/w
if asw<ash:
sizeas=(int(w*asw),int(h*asw))
else:
sizeas=(int(w*ash),int(h*ash))
pic1 = cv2.resize(pic1,dsize=sizeas)
base_pic[int(size[1]/2-sizeas[1]/2):int(size[1]/2+sizeas[1]/2),
int(size[0]/2-sizeas[0]/2):int(size[0]/2+sizeas[0]/2),:]=pic1
cv2.imwrite(new_fol+'/'+pic,base_pic)
基本的にあなたがやることは、13行目のリサイズ後の縦横比を指定するだけでOKです。
サンプルコードの実行結果の確認
それでは先ほどのサンプルコードを実行してみましょう。
まずは(256,256)にリサイズしてみます。
実行すると上の画像のようにnew_picというフォルダが新しくできているはずです。
この中を確認してみましょう。
もともとは横長の画像だったと思いますが、きちんと正方形にリサイズされていることがわかると思います。
画像を拡大して比較してみます。
(左がベース、右がリサイズ後です。)
特に左右上下に引き伸ばされることなくサイズ変更されてますね。
次はサイズを(512,256)で実行してみます。
今度は横長の画像になりましたね。
これでも赤い部分の歪みはありませんね。
というわけで問題なくやりたいことが実施できていることが確認できましたね。
おわりに
というわけで今回はpython-openCVを使って、画像の縦横比(アスペクト比)を維持したまま、指定サイズにリサイズする方法をご紹介しました。
AIのデータ作成の際などにぜひご活用ください。
このように、私のブログでは様々なスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村
それではまた!
Follow @HigashiSalary
コメント