python圖像填充與裁剪/resize的實(shí)現(xiàn)代碼
前言
有時(shí)候我們需要把圖片填充成某個(gè)數(shù)字的整數(shù)倍才能送進(jìn)模型。
例如,有些模型下采樣倍率是8倍,或者16倍,那么輸入的長和高就分別應(yīng)該是8或16的整數(shù)倍。如果圖片達(dá)不到,除了拉伸圖像(會(huì)造成比例改變),另一種就是先填充,后裁剪。
相信搞過NLP的同學(xué)并不陌生啦。
代碼
from math import ceil from torchvision.transforms.functional import to_tensor, to_pil_image from PIL import Image import torch # 填充到最接近base整數(shù)倍的長和寬圖像大小 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
有時(shí)候我們也要改變圖片的寬和高。
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)
到此這篇關(guān)于python圖像填充與裁剪/resize的文章就介紹到這了,更多相關(guān)python圖像resize內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python開發(fā)之IDEL(Python GUI)的使用方法圖文詳解
這篇文章主要介紹了python開發(fā)之IDEL(Python GUI)的使用方法,結(jié)合圖文形式較為詳細(xì)的分析總結(jié)了Python GUI的具體使用方法,需要的朋友可以參考下2015-11-11python加密解密庫cryptography使用openSSL生成的密匙加密解密
這篇文章主要介紹了python加密解密庫cryptography使用openSSL生成的密匙加密解密,需要的朋友可以參考下2020-02-02python解決Missing 1 required positional ar
這篇文章主要介紹了python解決Missing 1 required positional argument報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12用Python實(shí)現(xiàn)流星雨效果的方法詳解
這篇文章主要為大家介紹了Python實(shí)現(xiàn)流星雨效果的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>2021-12-12python模擬預(yù)測一下新型冠狀病毒肺炎的數(shù)據(jù)
這篇文章主要介紹了python模擬預(yù)測一下新型冠狀病毒肺炎的數(shù)據(jù) ,需要的朋友可以參考下2020-02-02python用于url解碼和中文解析的小腳本(python url decoder)
這篇文章主要介紹了python用于url解碼和中文解析的代碼,需要的朋友可以參考下2013-08-08python中小數(shù)點(diǎn)后取2位(四舍五入)及取2位(四舍五不入)的方法
這篇文章主要給大家介紹了python中小數(shù)點(diǎn)后取2位(四舍五入)及取2位(四舍五不入)的方法,在Python中取兩位小數(shù)的方法其實(shí)非常簡單,需要的朋友可以參考下2023-08-08