前言

有时候我们需要把图片填充成某个数字的整数倍才能送进模型。
例如,有些模型下采样倍率是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, Wsrc = Image.open(origin_png)src = to_tensor(src)# print(src.shape)  # torch.Size([3, 800, 600])# channel: (R, G, B) / 255origin_h, origin_w = src.shape[1], src.shape[2]print('原图像大小, height: {}, width: {}'.format(origin_h, origin_w))h = ceil(origin_h / base) * basew = ceil(origin_w / base) * baseimg = torch.ones(3, h, w)# 如果想要填充是黑色则注释掉上一句,换下面这一句# img = torch.zeros(3, h, w)img[:, :origin_h, :origin_w] = src # 保存填充后的图片to_pil_image(img).save(result_png)# 处理一下maskmask = torch.tensor(rgb) / 255mask = mask.view(3, 1, 1).repeat(1, h, w)# 保存填充后的maskto_pil_image(mask).save(result_mask_png)# 图像输出后我们需要clip一下
def clip_unpadding(input_png, output_png, origin_h, origin_w):# C, H, Wimg = 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: 390clip_unpadding(input_png, output_png, 567, 390)

resize

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

from PIL import Imagedef 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相关推荐

  1. OpenCV—Python 图像指定区域裁剪

    文章目录 一.指定图像位置的裁剪处理 二.批量处理-指定图像位置的裁剪 三.多进程(加快处理) 在工作中.在做数据集时,需要对图片进行处理,照相的图片我们只需要特定的部分,所以就想到裁剪一种所需的部分 ...

  2. python 图像填充颜色_Opencv:在轮廓图像中填充颜色

    你应该把图像二值化.findContours只有在图像中只有黑白两种颜色时才能正常工作.在 所以你应该看看图像中的每个像素和阈值.如果低于某个值,则将其设为黑色,反之则将其设为白色.对我来说,提供的图 ...

  3. 在Python中使用OpenCV裁剪图像

    What is Cropping? 什么是播种? Cropping is the removal of unwanted outer areas from a photographic or illu ...

  4. python图像resize_Python图像resize前后颜色不一致问题

    今天帮师姐解决一个bug,测试了Python图像resize前后颜色不一致问题. 代码片段执行的功能:图像指定倍数超分辨率,输入为[0-1] float型数据,输出为格式不限的图像 bug:输入图像与 ...

  5. python图像切割成多边形_python通过opencv实现图片裁剪原理解析

    这篇文章主要介绍了python通过opencv实现图片裁剪原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 图像裁剪的基本概念 : 图像裁剪是 ...

  6. python PIL进行图像的crop,resize和save

    图像预处理,需要进行图像的crop,resize和重命名save.代码如下: import os from PIL import Image'''train''' path = '/Users/xuq ...

  7. 【Tool】Augmentor和imgaug——python图像数据增强库

    Augmentor和imgaug--python图像数据增强库 Tags: ComputerVision Python 介绍两个图像增强库:Augmentor和imgaug,Augmentor使用比较 ...

  8. python图像增强_【Tool】Augmentor和imgaug——python图像数据增强库

    Augmentor和imgaug--python图像数据增强库 Tags: ComputerVision Python 介绍两个图像增强库:Augmentor和imgaug,Augmentor使用比较 ...

  9. 【办公自动化】Python图像操作术

    文章目录 1. 计算机图像基础 1.1 颜色和RGBA值 1.2 坐标和Box元组 2. 用Pillow操作图像 2.1 加载图像.保存图像 2.2 处理 `Image` 数据类型.创建空白图像 2. ...

最新文章

  1. 深入理解Python闭包概念
  2. 【dp】noip2000提高组 乘积最大
  3. 算法:合并两个有序链表
  4. 正交多项式族(勒让德多项式跟切比雪夫多项式)理论
  5. CMOS图像传感器——高动态范围
  6. 三面美团Java岗,java架构师线下培训
  7. (转)分布式锁的几种使用方式(redis、zookeeper、数据库)
  8. vbox虚拟机配置Redhat6.4本地yum源
  9. Redis4.0.13 安装踩雷记录
  10. 门槛,才是做生意持久盈利的基础
  11. 微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)
  12. 洛谷——P2550 [AHOI2001]彩票摇奖
  13. ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门
  14. mybatis spring maven
  15. 重庆大学数模美赛预选——城市救护车模型
  16. WPF程序支持多国语言
  17. 【王者荣耀】入门战斗经验
  18. Spring的运行原理
  19. flex+java项目创建_创建Flex 4和Java Web应用程序
  20. 麓言科技CAD制图技巧

热门文章

  1. 纸质合同转电子合同有法律效力吗
  2. 手机号座机号身份证号的规则
  3. win7搭建虚拟pppoe服务器,Win7在桌面建立一个pppoe宽带自动连接器的方法
  4. PDF文件怎么加密?推荐3种方法给你
  5. JS--图片轮播效果
  6. 2020年,JavaScript开发人员必备的5项高薪技能
  7. 计算机应用数学基础重庆大学,重庆大学应用物理学专业介绍
  8. ipfs Dark web 访问
  9. 蓝桥杯2018省赛Java开发大学C组思路总结
  10. 更改vscode默认浏览器为Chrome步骤