最近、データセットを処理する必要があるため、画像のバッチを特定の解像度とアスペクト比に従って調整する必要があるため、このコードを書きました。このコードには次の機能があります。
①指定した解像度に合わせて画像を変形します(変形は元の画像の比率には影響せず、余分な部分はグレーで塗りつぶされます)
②横向きでない場合は画像を90度回転します
コアコードはresize_img()です。
def resize_img(img, size):
iw,ih = img.size
w,h = size
scale = min(w/iw,h/ih) #获取变形比例
nw = int(iw*scale) #计算变形后的长宽
nh = int(ih*scale)
# 旋转
if(w>h & iw<ih):
img = img.rotate(-90)
# 变形
img = img.resize((nw,nh),Image.BICUBIC)
new_img = Image.new('RGB',size,(128,128,128)) #创建一张灰色背景
new_img.paste(img,((w-nw)//2,(h-nh)//2)) #将变形后的图片贴进背景中央
return new_img
このうち、回転の判定条件やパラメータは必要に応じて調整できます。
呼び出しコードは次のとおりです。
#----用以控制目标分辨率
sizeX = (4096,2160)
#--------------------
inFile = input("请输入文件夹路径")
outFile = input("请输入输出文件夹路径")
if (os.path.exists(outFile) == False):
os.mkdir(outFile) #当文件夹不存在时创建该路径
if(os.path.exists(inFile)):
fileList = os.listdir(inFile)
for file in fileList: # 遍历文件夹中所有文件
fullFile = inFile +'\\'+ str(file) #组合完整的输入路径
f = open(fullFile,'rb')
img = Image.open(f) #打开图片
newimg = resize_img(img, sizeX) #图片变形
print(file) #打印变形成功的文件
newimg.save(os.path.join(outFile,file))#
!!!保存関数は、os.path.join を使用してアドレスに接続する必要があります (+ を直接使用して接続するとエラーが報告されます)。
同時に、次のコードを使用して、データをフィルタリングするファイルの種類を決定できます。
if(filetype.lower,'.jpg'or filetype.lower=='.jpge' or filetype.lower=='.png'):