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)
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将RAW图像格式进行resize,你可以使用Python中的PIL库或OpenCV库来实现。在PIL库中,你可以使用Image类的resize方法来调整图像的大小。首先,你需要读取RAW图像,并使用特定的RAW格式处理库将其解码为图像数组。然后,你可以使用PIL库中的Image.fromarray方法将图像数组转换为PIL图像对象。接下来,你可以使用resize方法来调整图像的大小,并保存为你想要的格式。类似地,你也可以使用OpenCV库来实现图像resize使用cv2库中的imread函数读取RAW图像,并使用resize函数来调整图像的大小。最后,你可以使用imwrite函数将调整大小后的图像保存为指定格式的文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [RAW图像详解及使用Python读取raw格式图像并显示](https://blog.csdn.net/m0_46378271/article/details/126090531)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [tensorflow实现图像裁剪填充方法](https://download.csdn.net/download/weixin_38596879/13765083)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值