| 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 |
|
|