【Python】【进阶篇】四、Pillow的图像处理和几何变换

目录

  • 四、Pillow的图像处理和几何变换
    • 4.1 图像裁剪操作
    • 4.2 图像拷贝和粘贴
    • 4.3 图像几何变换
      • 4.3.1 翻转操作
      • 4.3.2 图像旋转
      • 4.3.3 图像变换

四、Pillow的图像处理和几何变换

图像的剪裁、复制、粘贴是图像处理过程中经常使用的基本操作,Pillow Image 类提供了简单、易用的 API 接口,能够帮助您快速实现这些简单的图像处理操作。

4.1 图像裁剪操作

Image 类提供的 crop() 函数允许我们以矩形区域的方式对原图像进行裁剪。
语法格式 crop(box=None)

  • box:表示裁剪区域,默认为 None,表示拷贝原图像。

注意:box 是一个有四个数字的元组参数 (x_左上,y_左下,x1_右上,y1_右下),分别表示被裁剪矩形区域的左上角 x、y 坐标和右下角 x,y 坐标。默认 (0,0) 表示坐标原点,宽度的方向为 x 轴,高度的方向为 y 轴,每个像素点代表一个单位。

from PIL import Image

"""
裁剪图像
"""
im = Image.open("./python.png")
box = (0, 0, 200, 100)
im_crop = im.crop(box)
im_crop.show()

最终,在原图的基础上裁剪出一张像素为 200 * 100 的图像。

4.2 图像拷贝和粘贴

Image 类提供了 copy()paste() 方法来实现图像的复制和粘贴。其中复制操作(即 copy() 方法)比较简单,下面主要介绍 paste() 粘贴方法。

语法格式 paste(image, box=None, mask=None)

  • image:指被粘贴的图片;
  • box:指定图片被粘贴的位置或者区域,其参数值是长度为 2 或者 4 的元组序列,长度为 2 时,表示具体的某一点 (x,y);长度为 4 则表示图片粘贴的区域,此时区域的大小必须要和被粘贴的图像大小保持一致。
  • mask:可选参数,为图片添加蒙版效果。
from PIL import Image

"""
复制粘贴图像
"""
im = Image.open("./python.png")
# 复制一张图片副本
im_copy = im.copy()
# 对副本进行裁剪
im_crop = im_copy.crop((0, 0, 200, 100))
# 创建一个新的图像作为蒙版,L模式,单颜色值
image_new = Image.new('L', (200, 100), 200)
# 将裁剪后的副本粘贴至副本图像上,并添加蒙版
im_copy.paste(im_crop, (100, 100, 300, 200), mask=image_new)
# 显示粘贴后的图像
im_copy.show()

4.3 图像几何变换

4.3.1 翻转操作

transpose() 翻转操作: 该函数可以实现图像的垂直、水平翻转。
语法格式如下:Image.transpose(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("./python.png")
# 返回一个新的Image对象
im_out = im.transpose(Image.FLIP_LEFT_RIGHT)
im_out.show()
im_out.save("./水平翻转.png")

4.3.2 图像旋转

rotate() 图像旋转: 任意角度旋转
语法格式 : mage.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

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

4.3.3 图像变换

transform()图像变换: 该函数能够对图像进行变换操作,通过指定的变换方式,产生一张规定大小的新图像。

语法格式:Image.transform(size, method, data=None, resample=0)

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

# 返回一个新的Image对象
im = Image.open("./python.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")

你可能感兴趣的:(Python,#,Pillow库,图像处理,python,pillow)