基本图像处理
Pillow简介
Pillow 是一个用于图像处理的 Python 库。它提供了许多与GIMP或Photoshop等成像应用程序中类似的图像处理功能,但它们是用Python代码而不是用户界面来调用的。这对于自动化图像处理任务或在你自己的应用程序中添加成像功能是非常理想的。
Pillow是一个名为PIL的老式图像库的fork。这意味着它是基于PIL中的原始代码,但随着时间的推移,新的功能和错误修正已经被加入。
PIL本身自2009年以来就没有更新过。Pillow的主要动机是PIL与Python 3不兼容,而且PIL与setuptools不兼容(意味着它不能用pip轻松安装)。此外,PIL还有一些已知的错误没有被修复。
Pillow已经成为PIL的事实上的替代品。Pillow使用PIL的命名空间。你不应该尝试将PIL和Pillow安装在同一个系统上。
安装Pillow
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade Pillow
Pillow的主要特点
- 打开、保存并在许多不同的图像格式之间转换。
- 从Python代码中自动执行各种图像处理任务。
- 从图像中提取元数据、统计数据和其他信息。
- 与系统功能集成 - 图像查看器、屏幕抓取、打印。
- 与各种UI系统集成 - Qt, Tk, Windows.
- 有效地访问像素数据,以实现你自己的图像处理。
- 在不同的像素表示法之间进行转换--颜色空间,颜色深度,基于调色板的图像。
- 与NumPy和其他Python库交换数据。
- 在图像上绘图。
- 应用色彩管理。
- 处理图像序列。
创建和显示图像
- 创建Mandelbrot Set的图像
from PIL import Image
image = Image.effect_mandelbrot((520, 440), (-2, -1.1, 0.6, 1.1), 256)
image.show()
Image.effect_mandelbrot函数有3个参数。
- size (520, 440)指定520x440像素的图像。
- extent (-2, -1.1, 0.6, 1.1)意味着图像将在-2 < x < 0.6 和 -1.1 , y , 1.1区域显示曼德布罗特集。这个区域涵盖了分形的主要部分。
- quality。这设置了算法创建图像时的最大循环次数。对于像这样的小图像,256就可以了。
调用image.show()会使图像在单独的窗口中显示。这主要是为了测试和调试的目的--它为你省去了将图像保存到文件然后在查看器中打开图像的麻烦。
保存图像
from PIL import Image
image = Image.effect_mandelbrot((520, 440), (-2, -1.1, 0.6, 1.1), 256)
image.save('mandelbrot.png')
save方法使用提供的文件名保存图像对象。文件类型是由扩展名控制的。例如,".png "创建PNG文件,或者".jpg "创建JPEG文件。
处理颜色
Pillow支持许多颜色空间,包括:
- RGB
- RGBA
- Grey
将字符串转换为颜色
你可以用字符串来表示颜色。有多种格式,例如。
- '#FF0080'表示100%红、0%绿、50%蓝的RGB值。
- 'rgb(100%, 0%, 50%)'也代表100%红、0%绿、50%蓝的RGB值。
- 'magenta'代表100%红、0%绿、100%蓝的RGB值。
当你把字符串传入需要颜色的Pillow函数时,它将被自动转换为颜色。
Image.new创建图像
from PIL import Image, ImageColor
image = Image.new('RGB', (400, 300), 'gold')
image.show()
new有3个参数。
- mode - 字符串,决定图像的颜色模型和深度。字符串RGB创建24-bit的RGB图像。我们将在本书的后面介绍其他模式。
- size - 以像素为单位的图像大小的元组。
- color - 图像的颜色。
打开图像
from PIL import Image
image = Image.open('boat.jpg')
image.show()
旋转图像
from PIL import Image
image = Image.open('boat.jpg')
rotated = image.rotate(180)
rotated.show()
rotated.save("rotated-boat.png")
rotate方法创建旋转过的新图像。旋转需要1个参数和一些额外的可选参数。
- angle - 旋转的角度,单位是度。
注意:旋转默认不会改变size,可能会导致部分图片内容丢失。使用expand=True会扩展图片size。transpose(Image.ROTATE_90)和im.rotate(90, expand=True)的效果实际是相同。
更多旋转实例:pillow/rotate.py
命令行旋转工具:tools/rotate.py
opencv的旋转:cv/rotate.py
创建缩略图
from PIL import Image
image = Image.open('boat.jpg')
image.thumbnail((200, 200))
image.show()
image.save("thumbnail-boat.png")
缩略图需要1个参数。
- size - 给出图像的最大宽度和高度的元组。
在这种情况下,原始图像是600×400像素。thumbnail将图像缩小到200×200像素--这是能满足所需尺寸的最大图像,但保持原来的宽度和高度比例。
图像模式
在Pillow中,图像模式描述了色彩空间和每个像素的比特数。它由字符串表示。
最常见的模式是
- 'RGB' - 24位的RGB(每种颜色8位)。
- 'RGBA' - 32位的RGB加阿尔法(每种颜色8位,阿尔法8位)。
- 'L'--8位灰度。
- ''1' - 两级数据(每个像素是全黑或全白)。
- 'P'--每个像素是一个8位的索引,进入一个调色板,映射到其他的颜色。
参考资料
- 本文涉及的python测试开发库 谢谢点赞!
- 本文相关海量书籍下载