Pillow简单入门

部署运行你感兴趣的模型镜像

参考自:Tutorial - Pillow (PIL Fork) 10.2.0 documentation

读取图片

在Pillow库中有Image类,类的静态方法主要用来创建实例。可以从文件中加载图片,或从头开始创建头像。

from PIL import Image
im = Image.open("hopper.ppm")

成功打开则会返回Image对象,否则引发OSError异常。

Image对象的主要属性如下:

im.format:标识图像的来源
im.mode:图像的模式
im.size:图片大小,是一个二元组

除open()外还有其他方法可以从如URL,二进制文件等读取图片,详细参考官方文档


图片的mode:

modesDescription
11位像素,黑白图像,存成8位像素
L8位像素,黑白
P索引色,使用调色板映射到任何其他模式
RGB3*8位像素,真彩
RGBA4*8位像素,真彩+透明通道
CMYK4*8位像素,印刷四色模式或彩色印刷模式
YCbCr3*8位像素,色彩视频格式

图片操作

剪切、粘贴和合并图像

从图像复制子矩形

from PIL import Image

im = Image.open("picture.jpg")
print(im.size)    # (1920, 1080)

box = (200, 200, 700, 700)
region = im.crop(box)
print(type(region))

region.show()
'''
(1920, 1080)
<class 'PIL.Image.Image'>
'''

需要一个4元组分别确定子矩形的左上角和右下角(图片一般都是以左上角为原点)。注意截取的图片同样为Image类型

处理子矩形并粘贴

在粘贴时截取的区域与给定的区域大小必须匹配(否则会覆盖),但是不要求图片格式相同(不相同会自动进行转换)。

# img.paste(im, box=None, [mask=None])
im.paste(region, box)

paste()至少要求参数为一个Image对象和给定左上角的二元组,mask为透明度,0-255。

拆分和合并通道

通过split()和merge()进行图片的拆解和合并。注意一个是对象方法,另一个是静态方法。

r, g, b = im.split()
im = Image.merge("RGB", (b, g, r))

对于单通道的图片split()返回本身,分解的单通道也是Image类型

几何变换

旋转

1.使用rotate()/transpose()

rotate(
        self,
        angle,
        resample=Resampling.NEAREST,
        expand=0,
        center=None,
        translate=None,
        fillcolor=None,
    )

@param	
angle:图片需要逆时针旋转的角度
resample:重采样滤波器,会进行上采样或下采样
expand:True时使输出图像扩大到能够展现整张图片
center:旋转中心
translate:图片旋转后需要平移后的像素,为一个二元组(x,y),它会在旋转后生效
fillcolor:当出现图片外的区域的填充颜色

关于重采样滤波器

重采样包括上采样与下采样:采用不同的重采样方法时可能会对图像属性造成一定影响。


关于expand参数的演示:

from PIL import Image


im1 = Image.open("picture.jpg")
im2 = Image.open("picture.jpg")

im1 = im1.rotate(45, expand=1)
im1.show()

im2 = im2.rotate(45)
im2.show()

2.使用transpose()

transpose(self, method)

"""
实现翻转或整数倍90度的旋转

:param method: One of :py:data:`Transpose.FLIP_LEFT_RIGHT`,
  :py:data:`Transpose.FLIP_TOP_BOTTOM`, :py:data:`Transpose.ROTATE_90`,
  :py:data:`Transpose.ROTATE_180`, :py:data:`Transpose.ROTATE_270`,
  :py:data:`Transpose.TRANSPOSE` or :py:data:`Transpose.TRANSVERSE`.
:returns: Returns a flipped or rotated copy of this image.
"""

大小调整

使用以下方法对原图片会进行缩放

im.resize(size, resample==None, box=None, reducing_gap=无)

box:规定需要resize的区域,否则为整张图片


from PIL import ImageOps
ImageOps.contain(im, size)
ImageOps.cover(im, size)
ImageOps.fit(im, size)
ImageOps.pad(im, size, color)

模式转换

使用对象的convert()方法,该方法支持任何模式到“L/RGB”模式的转换,否则需要经过RGB模式中转。

使用该函数时如果没有过高要求直接填入模式的对应字符串即可,如im=im.convert("L")。(函数原型参考官方文档)

图像增强

过滤器

在PIL中包括ImageFilter模块,预定义了许多过滤器

通过对象方法point()可以实现单点操作

from PIL import Image, ImageFilter

im = Image.open("picture.jpg")
out = im.filter(ImageFilter.DETAIL)
im.show()
# multiply each pixel by 1.2
out = im.point(lambda i: i * 1.2)
out.show()

运行上述程序后,picture每个像素点乘以1.2,整张图片看起来更“淡”。

图像增强

可以使用 ImageEnhance模块中的类进行更多的图片增强。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值