快资讯:python图像填充与裁剪/resize的实现代码
(资料图片仅供参考)
目录
前言代码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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 1联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 2亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 3现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 4如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 5AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 6转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 7充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 8好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 9名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?
- 10亚马逊云科技成立量子网络中心致力解决量子计算领域的挑战