python で画像のサイズを変更する。もともとが正方形のサイズでもないので、アスペクト比が変わるのですが、多少カットしながらサイズを正方形に変更します。コードは下記の参考サイトそのままです。
参考サイト
やることは、まず melon と melon100 というフォルダーがあって、melon の方に元画像があり、その中心部を正方形に切り出して、サイズを 100 x 100 の画像に変換して melon100 に書き出します。
# coding: utf-8
import sys, os
import numpy as np
import matplotlib.pyplot as plt
from dataset.imgnet import load_imgnet
from PIL import Image, ImageDraw, ImageFilter
import pickle
import glob
def crop_center(pil_img, crop_width, crop_height):
img_width, img_height = pil_img.size
return pil_img.crop(((img_width - crop_width) // 2,
(img_height - crop_height) // 2,
(img_width + crop_width) // 2,
(img_height + crop_height) // 2))
def crop_max_square(pil_img):
return crop_center(pil_img, min(pil_img.size), min(pil_img.size))
thumb_width = 100
#全画像のファイル名を取得
melons = glob.glob('melon/*.jpg')
for key, value in enumerate(melons):
im = Image.open(value)
im_thumb = crop_max_square(im).resize((thumb_width, thumb_width), Image.LANCZOS)
im_thumb.save('melon100/' + 'melon' + str(key) + '.jpg', quality=95)
画像を水増しするために反転したものや鏡映したものを作る。
# coding: utf-8
import sys, os
sys.path.append(os.pardir) # 親ディレクトリのファイルをインポートするための設定
import numpy as np
import matplotlib.pyplot as plt
from dataset.imgnet import load_imgnet
from PIL import Image, ImageDraw, ImageFilter
im = Image.open("./apple943.jpg")
#画像をarrayに変換
im_list = []
tmpA = np.asarray(im).copy()
im_list.append(tmpA)
tmpB = np.flipud(tmpA.copy())
tmpC = np.fliplr(tmpA.copy())
im_list.append(tmpB)
im_list.append(tmpC)
tmpD = np.flipud(tmpC.copy())
im_list.append(tmpD)
#貼り付け
for i in range(4):
plt.imshow(im_list[i])
#表示
plt.show()
#im_list4 = im_list4.tolist()
tmpImage = Image.fromarray(im_list[i])
tmpImage.save("./apple943-" + str(i) + ".jpg", quality=95)