在图像输入到CNN之前需要对图像做一些预处理,如resize和随机裁剪,这是在平时开发中写的代码片段,总结一下。
from PIL import Image
import random
def resize_and_randcrop(img, normal_width=256, normal_height=256):
'''
@ img: PIL.ImageFile.ImageFile, rgb
'''
# resize
w, h = img.size
if w>h:
ratio = h/normal_height
resized_img = img.resize((int(w/ratio), normal_height))
else:
ratio = w/normal_width
resized_img = img.resize((normal_width, int(h/ratio)))
## random_crop
w, h = resized_img.size
if w==normal_width:
margin = h-normal_height
left = 0
upper = random.randint(0, margin)
right = normal_width
lower = upper+normal_height
else:
margin = w - normal_width
left = random.randint(0, margin)
upper = 0
right = left+normal_width
lower = normal_height
croped_img = resized_img.crop((left, upper, right, lower))
return croped_img
···