中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python圖像填充與裁剪怎么實現

發布時間:2022-08-31 13:52:57 來源:億速云 閱讀:167 作者:iii 欄目:開發技術

這篇文章主要介紹“python圖像填充與裁剪怎么實現”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“python圖像填充與裁剪怎么實現”文章能幫助大家解決問題。

前言

有時候我們需要把圖片填充成某個數字的整數倍才能送進模型。
例如,有些模型下采樣倍率是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圖像填充與裁剪怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

樟树市| 赣榆县| 固始县| 南昌县| 锡林郭勒盟| 白银市| 北宁市| 定兴县| 安陆市| 云阳县| 边坝县| 桂林市| 霞浦县| 郎溪县| 图木舒克市| 镇原县| 枣庄市| 太仓市| 武定县| 绍兴市| 永平县| 巴林左旗| 海伦市| 乌兰县| 昭通市| 溧阳市| 武汉市| 米脂县| 清水河县| 通州市| 伊金霍洛旗| 色达县| 宁夏| 陕西省| 措美县| 苗栗市| 海兴县| 黑河市| 沧州市| 广宗县| 长武县|