根据
这篇文章,您可以使用此代码为图像添加填充而不拉伸它:
使用
PIL
:
from PIL import Image, ImageOps
desired_size = 224
im_pth = "/home/jdhao/test.jpg"
im = Image.open(im_pth)
old_size = im.size
ratio = float(desired_size) / max(old_size)
new_size = tuple([int(x * ratio) for x in old_size])
im = im.resize(new_size, Image.ANTIALIAS)
new_im = Image.new("RGB", (desired_size, desired_size))
new_im.paste(im, ((desired_size - new_size[0]) // 2,
(desired_size - new_size[1]) // 2))
new_im.show()
使用opencv
:
import cv2
desired_size = 224
im_pth = "data_cropped/ges_cropped_0/001019180113990401104712_frame_150.jpg"
im = cv2.imread(im_pth)
old_size = im.shape[:2]
ratio = float(desired_size) / max(old_size)
new_size = tuple([int(x * ratio) for x in old_size])
im = cv2.resize(im, (new_size[1], new_size[0]))
delta_w = desired_size - new_size[1]
delta_h = desired_size - new_size[0]
top, bottom = delta_h // 2, delta_h - (delta_h // 2)
left, right = delta_w // 2, delta_w - (delta_w // 2)
color = [0, 0, 0]
new_im = cv2.copyMakeBorder(im, top, bottom, left, right, cv2.BORDER_CONSTANT,
value=color)
print(new_im.shape)
cv2.imshow("image", new_im)
cv2.waitKey(0)
cv2.destroyAllWindows()
在
ImageDataGenerator
中,您可以使用
preprocessing_function
参数在生成数据之前进行上述预处理。我知道这个答案有点晚了,但我希望其他开发人员能够使用这段代码。