| import numpy as np | |
| import cv2 | |
| def resize_pad(img, size = 256): | |
| if len(img.shape) == 2: | |
| img = np.expand_dims(img, 2) | |
| if img.shape[2] == 1: | |
| img = np.repeat(img, 3, 2) | |
| if img.shape[2] == 4: | |
| img = img[:, :, :3] | |
| pad = None | |
| if (img.shape[0] < img.shape[1]): | |
| height = img.shape[0] | |
| ratio = height / (size * 1.5) | |
| width = int(np.ceil(img.shape[1] / ratio)) | |
| img = cv2.resize(img, (width, int(size * 1.5)), interpolation = cv2.INTER_AREA) | |
| new_width = width + (32 - width % 32) | |
| pad = (0, new_width - width) | |
| img = np.pad(img, ((0, 0), (0, pad[1]), (0, 0)), 'maximum') | |
| else: | |
| width = img.shape[1] | |
| ratio = width / size | |
| height = int(np.ceil(img.shape[0] / ratio)) | |
| img = cv2.resize(img, (size, height), interpolation = cv2.INTER_AREA) | |
| new_height = height + (32 - height % 32) | |
| pad = (new_height - height, 0) | |
| img = np.pad(img, ((0, pad[0]), (0, 0), (0, 0)), 'maximum') | |
| if (img.dtype == 'float32'): | |
| np.clip(img, 0, 1, out = img) | |
| return img[:, :, :1], pad | |