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

 更新时间:2022年08月31日 11:12:28   作者:Andy Dennis  
这篇文章主要介绍了python图像填充与裁剪/resize,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

前言

有时候我们需要把图片填充成某个数字的整数倍才能送进模型。
例如,有些模型下采样倍率是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 docutils文档编译过程方法解析

    Python docutils文档编译过程方法解析

    这篇文章主要介绍了Python docutils文档编译过程方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python opencv实现证件照换底功能

    python opencv实现证件照换底功能

    这篇文章主要为大家详细介绍了python opencv实现证件照换底功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • python使用Matplotlib绘制多种常见图形

    python使用Matplotlib绘制多种常见图形

    这篇文章主要介绍了python使用Matplotlib绘制多种常见图形,文章围绕主题展开详细的用Matplotlib绘制内容,需要的小伙伴可以参考一下
    2022-05-05
  • Python描述符descriptor使用原理解析

    Python描述符descriptor使用原理解析

    这篇文章主要介绍了Python 描述符descriptor使用原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • pandas如何将DataFrame 转为txt文本去除引号

    pandas如何将DataFrame 转为txt文本去除引号

    这篇文章主要介绍了pandas如何将DataFrame 转为txt文本去除引号,文中补充介绍了DataFrame导CSV txt || 每行有双引号的原因及解决办法,感兴趣的朋友跟随小编一起看看吧
    2024-01-01
  • openCV入门学习基础教程第三篇

    openCV入门学习基础教程第三篇

    pencv是用于快速处理图像处理、计算机视觉问题的工具,支持多种语言进行开发如c++、python、java等,下面这篇文章主要给大家介绍了关于openCV入门学习基础教程的相关资料,需要的朋友可以参考下
    2022-11-11
  • 一文教会你用nginx+uwsgi部署自己的django项目

    一文教会你用nginx+uwsgi部署自己的django项目

    uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议,下面这篇文章主要给大家介绍了关于用nginx+uwsgi部署自己的django项目的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • Python多线程编程(五):死锁的形成

    Python多线程编程(五):死锁的形成

    这篇文章主要介绍了Python多线程编程(五):死锁的形成,本文讲解了死锁的概念、死锁示例、避免死锁的方法等内容,需要的朋友可以参考下
    2015-04-04
  • Python中time.sleep(0.001)是否真的只等待1毫秒

    Python中time.sleep(0.001)是否真的只等待1毫秒

    这篇文章主要介绍了Python中time.sleep(0.001)是否真的只等待1毫秒,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例

    Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例

    这篇文章主要介绍了Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能,结合实例形式分析了Python基于TCP UDP协议的IPv4 IPv6模式客户端和服务端数据发送与接收相关操作技巧,需要的朋友可以参考下
    2018-03-03

最新评论