python图像填充与裁剪/resize的实现代码

作者:Andy?Dennis 时间:2022-07-12 07:49:15 

前言

有时候我们需要把图片填充成某个数字的整数倍才能送进模型。
例如,有些模型下采样倍率是8倍,或者16倍,那么输入的长和高就分别应该是8或16的整数倍。如果图片达不到,除了拉伸图像(会造成比例改变),另一种就是先填充,后裁剪。
相信搞过NLP的同学并不陌生啦。

代码

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)

resize

有时候我们也要改变图片的宽和高。

from PIL import Image
def resize_img(origin_png, resize_png, height, width):
   img = Image.open(origin_png)
   img = img.resize((width, height))
   img.save(resize_png)
if __name__ == '__main__':
   origin_png = 'pic/white.jpg'
   resize_png = 'pic/white_resize.png'
   resize_img(origin_png, resize_png, 800, 600)

来源:https://blog.csdn.net/weixin_43850253/article/details/126445783

标签:python,图像,resize,裁剪,填充
0
投稿

猜你喜欢

  • GO的range具体使用

    2023-07-21 03:27:27
  • PHP原型模式Prototype Pattern的使用介绍

    2023-05-25 01:21:04
  • SQL触发器在保持数据库完整性中的实际应用

    2009-10-23 14:34:00
  • 详解Python列表赋值复制深拷贝及5种浅拷贝

    2022-07-16 16:22:41
  • 解决Tensorflow使用pip安装后没有model目录的问题

    2023-08-09 22:58:05
  • 随机6+1选号码摇奖程序

    2008-07-18 13:15:00
  • Python中用Spark模块的使用教程

    2021-10-02 13:11:40
  • 使用PyV8在Python爬虫中执行js代码

    2022-05-09 14:33:36
  • 在python中获取div的文本内容并和想定结果进行对比详解

    2021-09-05 07:29:37
  • Python如何一行输入多个数,并存入列表

    2023-09-27 19:14:56
  • 分析与比较五种MySQL数据库可靠性方案

    2009-07-30 08:25:00
  • Python中的正则表达式与JSON数据交换格式

    2023-06-21 18:16:26
  • 基于python实现把json数据转换成Excel表格

    2021-02-20 05:22:04
  • python实现转盘效果 python实现轮盘抽奖游戏

    2023-03-06 00:00:57
  • Python+OpenCV采集本地摄像头的视频

    2021-12-06 23:11:31
  • Python map及filter函数使用方法解析

    2021-11-20 05:25:03
  • golang goquery selector选择器使用示例大全

    2023-10-14 15:40:58
  • Python实现选择排序

    2021-06-17 03:23:40
  • 走中国特色的网站重构道路

    2010-04-08 16:10:00
  • php实现mysql备份恢复分卷处理的方法

    2023-11-16 20:55:33
  • asp之家 网络编程 m.aspxhome.com