热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python教程分享python图像填充与裁剪/resize的实现代码

前言有时候我们需要把图片填充成某个数字的整数倍才能送进模型。例如,有些模型下采样倍率是8倍,或者16倍,那么输入的长和高就分别应该是8或16的整数倍。如果图片达不到,除了拉伸图像(

前言

有时候我们需要把图片填充成某个数字的整数倍才能送进模型。
例如,有些模型下采样倍率是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)

到此这篇关于python图像填充与裁剪/resize的文章就介绍到这了,更多相关python图像resize内容请搜索<编程笔记>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<编程笔记>!

需要了解更多python教程分享python图像填充与裁剪/resize的实现代码,都可以关注python教程分享栏目&#8212;编程笔记


推荐阅读
author-avatar
百变精灵2596
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有