| from math import ceil from torchvision.transforms.functional import to_tensor, to_pil_image from PIL import Image import torch # 填充到最接近base整数倍的长和宽图像大小 def get_padding_pic_mask(origin_png, result_png, result_mask_png, rgb=[[130, 206, 255]], base=4):     # C, H, W     src = Image.open(origin_png)     src = to_tensor(src)     # print(src.shape)  # torch.Size([3, 800, 600])     # channel: (R, G, B) / 255     origin_h, origin_w = src.shape[1], src.shape[2]     print('原图像大小, height: {}, width: {}'.format(origin_h, origin_w))       h = ceil(origin_h / base) * base     w = ceil(origin_w / base) * base       img = torch.ones(3, h, w)     # 如果想要填充是黑色则注释掉上一句,换下面这一句     # img = torch.zeros(3, h, w)       img[:, :origin_h, :origin_w] = src     # 保存填充后的图片     to_pil_image(img).save(result_png)       # 处理一下mask     mask = torch.tensor(rgb) / 255       mask = mask.view(3, 1, 1).repeat(1, h, w)     # 保存填充后的mask     to_pil_image(mask).save(result_mask_png)         # 图像输出后我们需要clip一下 def clip_unpadding(input_png, output_png, origin_h, origin_w):     # C, H, W     img = Image.open(input_png)     img = to_tensor(img)     img = img[:, :origin_h, :origin_w]     # 保存裁剪后的图片     to_pil_image(img).save(output_png)   if __name__ == '__main__':     # origin_png = 'pic/pic.jpg'     # result_png = 'pic/pic_padding.jpg'     # result_mask_png = 'pic/mask_padding.jpg'     # get_padding_pic_mask(origin_png, result_png, result_mask_png)       input_png = 'pic/pic_padding.jpg'     output_png = 'pic/pic_clip.jpg'     # 原图像大小, height: 567, width: 390     clip_unpadding(input_png, output_png, 567, 390) |