pillow 圖像幾何變換

2022-08-29 15:38 更新

圖像的幾何變換主要包括圖像翻轉(zhuǎn)、圖像旋轉(zhuǎn)和圖像變換操作,Image 類提供了處理這些操作的函數(shù) ?transpose()?、?rotate()? 和 ?transform()?,下面分別對(duì)它們進(jìn)行講解。


transpose()翻轉(zhuǎn)操作

該函數(shù)可以實(shí)現(xiàn)圖像的垂直、水平翻轉(zhuǎn),語(yǔ)法格式如下:

Image.transpose(method)

method 參數(shù)決定了圖片要如何翻轉(zhuǎn),參數(shù)值如下:

  • Image.FLIP_LEFT_RIGHT:左右水平翻轉(zhuǎn);
  • Image.FLIP_TOP_BOTTOM:上下垂直翻轉(zhuǎn);
  • Image.ROTATE_90:圖像旋轉(zhuǎn) 90 度;
  • Image.ROTATE_180:圖像旋轉(zhuǎn) 180 度;
  • Image.ROTATE_270:圖像旋轉(zhuǎn) 270 度;
  • Image.TRANSPOSE:圖像轉(zhuǎn)置;
  • Image.TRANSVERSE:圖像橫向翻轉(zhuǎn)。

使用示例如下:

from PIL import Image
im = Image.open("./w3cschool.png")
#返回一個(gè)新的Image對(duì)象
im_out=im.transpose(Image.FLIP_LEFT_RIGHT)
im_out.show()
im_out.save("./水平翻轉(zhuǎn).png")

圖像顯示結(jié)果,如下所示:


圖1:圖像翻轉(zhuǎn)操作


rotate()任意角度旋轉(zhuǎn)

當(dāng)我們想把圖像旋轉(zhuǎn)任意角度時(shí),可以使用 ?rotate() ?函數(shù),語(yǔ)法格式如下:

Image.rotate(angle, resample=PIL.Image.NEAREST, expand=None, center=None, translate=None, fillcolor=None)

參數(shù)說(shuō)明如下:

  • angle:表示任意旋轉(zhuǎn)的角度;
  • resample:重采樣濾波器,默認(rèn)為 PIL.Image.NEAREST 最近鄰插值方法;
  • expand:可選參數(shù),表示是否對(duì)圖像進(jìn)行擴(kuò)展,如果參數(shù)值為 True 則擴(kuò)大輸出圖像,如果為 False 或者省略,則表示按原圖像大小輸出;
  • center:可選參數(shù),指定旋轉(zhuǎn)中心,參數(shù)值是長(zhǎng)度為 2 的元組,默認(rèn)以圖像中心進(jìn)行旋轉(zhuǎn);
  • translate:參數(shù)值為二元組,表示對(duì)旋轉(zhuǎn)后的圖像進(jìn)行平移,以左上角為原點(diǎn);
  • fillcolor:可選參數(shù),填充顏色,圖像旋轉(zhuǎn)后,對(duì)圖像之外的區(qū)域進(jìn)行填充。

使用示例如下:

from PIL import Image
im = Image.open("./w3cschool.png")
#translate的參數(shù)值可以為負(fù)數(shù),并將旋轉(zhuǎn)圖之外的區(qū)域填充為綠色
#返回同一個(gè)新的Image對(duì)象
im_out=im.rotate(45,translate=(0,-25),fillcolor="green")
im_out.show()
im_out.save("./旋轉(zhuǎn)圖像.png")

輸出結(jié)果:


圖2:圖像旋轉(zhuǎn)


transform()圖像變換

該函數(shù)能夠?qū)D像進(jìn)行變換操作,通過(guò)指定的變換方式,產(chǎn)生一張規(guī)定大小的新圖像,語(yǔ)法格式如下:

Image.transform(size, method, data=None, resample=0) 

參數(shù)說(shuō)明:

  • size:指定新圖片的大小;
  • method:指定圖片的變化方式,比如 Image.EXTENT 表示矩形變換;
  • data:該參數(shù)用來(lái)給變換方式提供所需數(shù)據(jù);
  • resample:圖像重采樣濾波器,默認(rèn)參數(shù)值為 PIL.Image.NEAREST

使用示例如下:

from PIL import Image
im = Image.open("./w3cschool.png")
#設(shè)置圖像大小250*250,并根據(jù)data的數(shù)據(jù)截取原圖像的區(qū)域,生成新的圖像
im_out=im.transform((250,250),Image.EXTENT,data=[0,0,30 + im.width//4,im.height//3])
im_out.show()
im_out.save("./變換.png")

輸出圖像顯示如下:


圖3:圖像矩形變換

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)