Spaces:
Runtime error
Runtime error
| from PIL import Image | |
| import PIL | |
| import cv2, math,os | |
| import numpy as np | |
| # 最短边为1024,并进行中心裁剪 | |
| def resize_image_pil(input_image, min_side=1024): | |
| # 获取图像的宽度和高度 | |
| width, height = input_image.size | |
| # 计算缩放比例 | |
| scale = min_side / min(height, width) | |
| # 计算新的尺寸 | |
| new_width = int(width * scale) | |
| new_height = int(height * scale) | |
| # 调整图像大小 | |
| resized_image = input_image.resize((new_width, new_height), Image.ANTIALIAS) | |
| # 计算中心裁剪的位置 | |
| crop_top = (new_height - min_side) // 2 | |
| crop_left = (new_width - min_side) // 2 | |
| # 进行中心裁剪 | |
| cropped_image = resized_image.crop((crop_left, crop_top, crop_left + min_side, crop_top + min_side)) | |
| return cropped_image | |
| def resize_image_cv2(input_image, min_side=1024, ): | |
| # cv2读取的image | |
| (height, width, _ )= input_image.shape | |
| # print(height, width) | |
| scale = min_side / min(height, width) | |
| # 计算新的尺寸 | |
| new_width = int(width * scale) | |
| new_height = int(height * scale) | |
| input_image =cv2.resize(input_image, (new_width, new_height)) | |
| # 计算中心裁剪的位置 | |
| crop_top = (new_height - min_side) // 2 | |
| crop_left = (new_width - min_side) // 2 | |
| # 进行中心裁剪 | |
| image = input_image[crop_top:crop_top + min_side, crop_left:crop_left + min_side] | |
| return image | |
| def resize_img0(input_image, max_side=1280, min_side=1024, | |
| mode=Image.BILINEAR, base_pixel_number=64): | |
| w, h = input_image.size | |
| ratio = min_side / min(h, w) | |
| w, h = round(ratio*w), round(ratio*h) | |
| ratio = max_side / max(h, w) | |
| input_image = input_image.resize([round(ratio*w), round(ratio*h)], mode) | |
| w_resize_new = (round(ratio * w) // base_pixel_number) * base_pixel_number | |
| h_resize_new = (round(ratio * h) // base_pixel_number) * base_pixel_number | |
| input_image = input_image.resize([w_resize_new, h_resize_new], mode) | |
| return input_image | |
| def resize_img1(input_image, max_side=1280, min_side=1024, | |
| mode=Image.BILINEAR, base_pixel_number=64): | |
| w, h = input_image.size | |
| ratio = min_side / w | |
| w, h = round(ratio*w), round(ratio*h) | |
| input_image = input_image.resize([w, h], mode) | |
| w_resize_new = (w // base_pixel_number) * base_pixel_number | |
| h_resize_new = (h // base_pixel_number) * base_pixel_number | |
| input_image = input_image.resize([w_resize_new, h_resize_new], mode) | |
| return input_image | |
| def resize_img(input_image, max_side=1024, min_side=1024, size=None, | |
| pad_to_max_side=False, mode=Image.BILINEAR, base_pixel_number=64): | |
| w, h = input_image.size | |
| if size is not None: | |
| w_resize_new, h_resize_new = size | |
| else: | |
| ratio = min_side / min(h, w) | |
| w, h = round(ratio * w), round(ratio * h) | |
| ratio = max_side / max(h, w) | |
| input_image = input_image.resize([round(ratio * w), round(ratio * h)], mode) | |
| w_resize_new = (round(ratio * w) // base_pixel_number) * base_pixel_number | |
| h_resize_new = (round(ratio * h) // base_pixel_number) * base_pixel_number | |
| input_image = input_image.resize([w_resize_new, h_resize_new], mode) | |
| if pad_to_max_side: | |
| res = np.ones([max_side, max_side, 3], dtype=np.uint8) * 255 | |
| offset_x = (max_side - w_resize_new) // 2 | |
| offset_y = (max_side - h_resize_new) // 2 | |
| res[offset_y:offset_y + h_resize_new, offset_x:offset_x + w_resize_new] = np.array(input_image)[:, :, :3] | |
| input_image = Image.fromarray(res) | |
| return input_image |