在 Python 中处理图像?


Pillow 是 Python 中最流行且被认为是默认的图像处理库之一。Pillow 是 Python 图像库(PIL)的更新版本,支持一系列简单和高级的图像处理功能。它也是其他 Python 库(如 sciPy 和 Matplotlib)中简单图像支持的基础。

安装 Pillow

在开始之前,我们需要 Python 和 Pillow。对于 Linux 系统,Pillow 可能已经存在,因为包括 Fedora、Debian/Ubuntu 和 ArchLinux 在内的主要 Linux 发行版都将 Pillow 包含在以前包含 PIL 的软件包中。

最简单的安装方法是使用 pip

pip install pillow

如何加载和显示图像

首先,我们需要一个测试图像来演示使用 Python Pillow 库的一些重要功能。

我使用“统一雕像”照片作为示例图像。下载图像并将其保存到当前工作目录中。

#Load and show an image with Pillow
from PIL import Image

#Load the image
img = Image.open('statue_of_unity.jpg')

#Get basic details about the image
print(img.format)
print(img.mode)
print(img.size)

#show the image
img.show()

结果

JPEG
RGB
(400, 260)

在上面,图像使用 Image 类上的 open() 函数直接加载。这将返回一个图像对象,其中包含图像的像素数据以及有关图像的详细信息。

图像上的 format 属性将报告图像格式(例如 png、jpeg),mode 将报告像素通道格式(例如 CMYK 或 RGB),而 size 将报告图像以像素为单位的尺寸(例如 400*260)。

show() 函数将使用操作系统的默认应用程序显示图像。

将图像转换为灰度

要将图像转换为灰度,显示它然后保存它非常容易,只需执行以下操作即可

#Import required library
from PIL import Image
#Read an image & convert it to gray-scale
image = Image.open('statue_of_unity.jpg').convert('L')
#Display image
image.show()
#Save image
image.save('statue_of_unity_gs.jpg')

结果

运行上述程序后,将在当前工作目录中创建一个名为“statue_of_unity_gs.jpg”的文件。

转换为其他图像类型

将一种类型的图像(jpeg)转换为另一种类型(例如 png)也非常容易。

from PIL import Image

image = Image.open('statue_of_unity.jpg')
image.save('statue_of_unity.png')


创建一个新的图像文件并保存在我们的默认目录中。

调整图像大小

我们当前图像文件的尺寸为 400 * 260px。如果我们想调整它的大小,并使其大小为 440 * 600px,可以通过以下方式实现:

from PIL import Image


image = Image.open('statue_of_unity.jpg')
newImage = image.resize((440, 600))
newImage.save('statue_of_unity_440&600.jpg')


一个名为“statue_of_unit_440*600.jpg”的新文件,大小为 440 * 600px,被创建并保存在当前工作目录中。




如您所见,这会将我们的原始图像放大到所需的尺寸,而不是裁剪它,这可能是您不希望看到的。

如果您想裁剪现有的图像,可以使用以下方法:

image.crop(box=None)

旋转图像

下面的程序加载图像,将其旋转 45 度,并使用外部查看器显示它。


from PIL import Image

image = Image.open('statue_of_unity.jpg')
image.rotate(45).show()



创建缩略图

下面的程序将创建当前工作目录中所有 jpeg 图像的 128*128 缩略图。

from PIL import Image
import glob, os

size = 128, 128

for infile in glob.glob("*.jpg"):
file, ext = os.path.splitext(infile)
image = Image.open(infile)
image.thumbnail(size, Image.ANTIALIAS)
image.save(file + ".thumbnail", "JPEG")


结果

将返回我当前目录(c:\python\python361)中所有 jpeg 文件的缩略图,包括“statue_of_unity.jpg”图像。

更新时间: 2019年7月30日

3K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告