codecamp

pillow 图像几何变换

图像的几何变换主要包括图像翻转、图像旋转和图像变换操作,Image 类提供了处理这些操作的函数 ​transpose()​、​rotate()​ 和 ​transform()​,下面分别对它们进行讲解。


transpose()翻转操作

该函数可以实现图像的垂直、水平翻转,语法格式如下:

Image.transpose(method)

method 参数决定了图片要如何翻转,参数值如下:

  • Image.FLIP_LEFT_RIGHT:左右水平翻转;
  • Image.FLIP_TOP_BOTTOM:上下垂直翻转;
  • Image.ROTATE_90:图像旋转 90 度;
  • Image.ROTATE_180:图像旋转 180 度;
  • Image.ROTATE_270:图像旋转 270 度;
  • Image.TRANSPOSE:图像转置;
  • Image.TRANSVERSE:图像横向翻转。

使用示例如下:

from PIL import Image
im = Image.open("./w3cschool.png")
#返回一个新的Image对象
im_out=im.transpose(Image.FLIP_LEFT_RIGHT)
im_out.show()
im_out.save("./水平翻转.png")

图像显示结果,如下所示:


图1:图像翻转操作


rotate()任意角度旋转

当我们想把图像旋转任意角度时,可以使用 ​rotate() ​函数,语法格式如下:

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

参数说明如下:

  • angle:表示任意旋转的角度;
  • resample:重采样滤波器,默认为 PIL.Image.NEAREST 最近邻插值方法;
  • expand:可选参数,表示是否对图像进行扩展,如果参数值为 True 则扩大输出图像,如果为 False 或者省略,则表示按原图像大小输出;
  • center:可选参数,指定旋转中心,参数值是长度为 2 的元组,默认以图像中心进行旋转;
  • translate:参数值为二元组,表示对旋转后的图像进行平移,以左上角为原点;
  • fillcolor:可选参数,填充颜色,图像旋转后,对图像之外的区域进行填充。

使用示例如下:

from PIL import Image
im = Image.open("./w3cschool.png")
#translate的参数值可以为负数,并将旋转图之外的区域填充为绿色
#返回同一个新的Image对象
im_out=im.rotate(45,translate=(0,-25),fillcolor="green")
im_out.show()
im_out.save("./旋转图像.png")

输出结果:


图2:图像旋转


transform()图像变换

该函数能够对图像进行变换操作,通过指定的变换方式,产生一张规定大小的新图像,语法格式如下:

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

参数说明:

  • size:指定新图片的大小;
  • method:指定图片的变化方式,比如 Image.EXTENT 表示矩形变换;
  • data:该参数用来给变换方式提供所需数据;
  • resample:图像重采样滤波器,默认参数值为 PIL.Image.NEAREST

使用示例如下:

from PIL import Image
im = Image.open("./w3cschool.png")
#设置图像大小250*250,并根据data的数据截取原图像的区域,生成新的图像
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:图像矩形变换

pillow 图像裁剪、复制、粘贴操作
pillow 图像降噪处理
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }