Python對(duì)圖片進(jìn)行resize、裁剪、旋轉(zhuǎn)、翻轉(zhuǎn)問題
對(duì)圖片進(jìn)行resize、裁剪、旋轉(zhuǎn)、翻轉(zhuǎn)
圖片處理時(shí)常用的手段有resize、裁剪、旋轉(zhuǎn)、翻轉(zhuǎn),簡單介紹一下python中怎么利用PIL庫和torchvision庫來對(duì)圖片進(jìn)行這幾項(xiàng)操作。
首先我們的原始圖片是10張網(wǎng)上下載尺寸不一的圖片,如下:

操作1:resize 將圖片resize到相同尺寸(320,240)
from PIL import Image
import torchvision.transforms as transforms
#使用PIL庫讀入圖片并進(jìn)行resize
def ResizeImage():
if not os.path.exists(rdir):
os.makedirs(rdir)
for i in range(10):
im = Image.open(dir+str(i)+".jpg")
im = im.resize((320,240),Image.BILINEAR) #第一個(gè)參數(shù)為想要的size,第二個(gè)參數(shù)為插值方法,雙線性插值這里用的是
im.save('{}/{}.jpg'.format(rdir, i))操作2:剪裁(包括圍繞中心剪裁和隨機(jī)剪裁)
#圖像隨機(jī)剪裁和中心剪裁
def crop(lib):
for i in range(10):
img = Image.open(lib+"/"+str(i)+".jpg")
CenterCrop = transforms.CenterCrop((240,320)) #中心裁剪
cropped_image = CenterCrop(img) #PIL.Image.Image
# im=np.array(cropped_image) #可以將PIL.Image.Image轉(zhuǎn)成ndarry
#cropped_image.show() #將圖片顯示
cropped_image.save('{}/cen_crop{}.jpg'.format(rdir, i))
RandomCrop = transforms.RandomCrop(size=(240, 320)) #隨機(jī)剪裁
random_image = RandomCrop(img)
random_image.save('{}/rand_crop{}.jpg'.format(rdir, i))操作3:隨機(jī)旋轉(zhuǎn)
#隨機(jī)旋轉(zhuǎn)
def random_rotation(lib):
for i in range(10):
img = Image.open(lib+"/"+str(i)+".jpg")
RR = transforms.RandomRotation(degrees=(10, 80)) #degrees為隨機(jī)旋轉(zhuǎn)的角度
rr_image = RR(img)
rr_image.save('{}/rand_rotation{}.jpg'.format(rdir, i))操作4:翻轉(zhuǎn)
#圖片依概率翻轉(zhuǎn),p為翻轉(zhuǎn)的概率
def horizontal_flip(lib):
for i in range(10):
img = Image.open(lib+"/"+str(i)+".jpg")
HF = transforms.RandomHorizontalFlip(p=1.0) #p為概率,缺省時(shí)默認(rèn)0.5
hf_image = HF(img)
hf_image.save('{}/hori_flip{}.jpg'.format(rdir, i))下面展示一下操作后的圖片:

從上到下每行依次為resize、中心裁剪、翻轉(zhuǎn)、隨機(jī)裁剪和隨機(jī)旋轉(zhuǎn)的結(jié)果
單張圖像變換大小——img.resize()
這個(gè)是一段學(xué)過的簡單程序,可以改變圖像的大小,jpg,png都可以的:
#encoding=utf-8 #author: walker #date: 2014-05-15 #function: 更改圖片尺寸大小 from PIL import Image ''' filein: 輸入圖片 fileout: 輸出圖片 width: 輸出圖片寬度 height:輸出圖片高度 type:輸出圖片類型(png, gif, jpeg...) ''' def ResizeImage(filein, fileout, width, height, type): ? img = Image.open(filein) ? out = img.resize((width, height),Image.ANTIALIAS) #resize image with high-quality ? out.save(fileout, type) if __name__ == "__main__": ? filein = r'0.jpg' ? fileout = r'testout.png' ? width = 6000 ? height = 6000 ? type = 'png' ? ResizeImage(filein, fileout, width, height, type)
這個(gè)函數(shù)img.resize((width, height),Image.ANTIALIAS)
第二個(gè)參數(shù):
Image.NEAREST:低質(zhì)量Image.BILINEAR:雙線性Image.BICUBIC:三次樣條插值Image.ANTIALIAS:高質(zhì)量
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
PyTorch中torch.load()的用法和應(yīng)用
torch.load()它用于加載由torch.save()保存的模型或張量,本文主要介紹了PyTorch中torch.load()的用法和應(yīng)用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
Python代碼調(diào)用執(zhí)行shell踩坑解決
這篇文章主要為大家介紹了Python代碼調(diào)用執(zhí)行shell,踩過的坑解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
python算法與數(shù)據(jù)結(jié)構(gòu)之單鏈表的實(shí)現(xiàn)代碼
鏈表是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。這篇文章主要介紹了python算法與數(shù)據(jù)結(jié)構(gòu)之單鏈表的實(shí)現(xiàn)代碼,需要的朋友可以參考下2019-06-06
Python使用multiprocessing模塊實(shí)現(xiàn)多進(jìn)程并發(fā)處理大數(shù)據(jù)量的示例代碼
這篇文章主要介紹了Python使用multiprocessing模塊實(shí)現(xiàn)多進(jìn)程并發(fā)處理大數(shù)據(jù)量的示例代碼,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01

