Python Pillow图像处理库使用指南

晚来风
晚来风
发布时间:2026-10-16| 4人浏览过
原创

本文详细介绍Python中Pillow库的安装方法及核心图像处理功能。涵盖图片打开、格式转换、缩略图生成、属性获取、模式转换、几何变换、图像增强及滤镜处理等常用操作,帮助开发者快速掌握Python图像编程基础。

安装

  • 该库被广泛认为是Python官方推荐的图像处理库。
  • PIL(Pillow的前身)非常适合用于图像归档以及批量处理任务。利用它,用户可以轻松创建缩略图、转换图像格式以及打印图像等。
  • PIL库兼容多种GUI框架接口,因此也可用于图像的展示功能。
  • 此外,PIL库支持图像的大小调整、旋转以及任意仿射变换操作。
pip install Pillow

打开图片

from PIL import Image

im = Image.open("picture.jpg")
im.show()

转换格式并保存

from PIL import Image

im = Image.open("picture.jpg")
im.save("result.png")

创建缩略图

from PIL import Image

im = Image.open("picture.jpg")
im.thumbnail((128, 128))
im.save("result.jpg")

获取图片属性

  • 获取图像的来源信息。如果图像并非从文件读取,该值将为None。
from PIL import Image

im = Image.open("picture.jpg")
print(im.format)

图片信息

from PIL import Image

im = Image.open("picture.jpg")
print(im.info)

调色板

  • 若图像的模式为“P”,则返回Image Palette类的实例;否则返回None。
from PIL import Image

im = Image.open("picture.jpg")
print(im.palette)

画板

  • 使用指定的变量mode和size生成画板。
from PIL import Image

im= Image.new("RGB", (128, 128), "#FF0000")
im.show()

图片模式

  • 图像的模式,常见类型如下:
  • L:8位像素,表示黑白图像。
  • P:9位像素,使用调色板映射到其他模式。
  • 1:1位像素,黑白图像,存储时转为8位像素。
  • RGB:3*8位像素,表示真彩色。
  • RGBA:4*8位像素,表示真彩色并包含透明通道。
  • CMYK:4*8位像素,用于印刷四色模式或彩色印刷。
  • YCbCr:3*8位像素,常用于色彩视频格式。
  • I:32位整型像素。
  • F:33位浮点型像素。
from PIL import Image

im = Image.open("picture.jpg")
print(im.mode)

模式转换

  • 将当前图像转换为其他模式,并返回新的图像对象。
from PIL import Image

im = Image.open("picture.jpg")
new_im = im.convert('L')
print(new_im.mode)
new_im.show()

矩阵模式转换

  • 使用转换矩阵将一个“RGB”图像转换为“L”或“RGB”图像。
from PIL import Image

im = Image.open("picture.jpg")
print(im.mode)
matrix = (0.412453,0.357580, 0.180423, 0,
0.212671,0.715160, 0.072169, 0,
0.019334,0.119193, 0.950227, 0 )
new_im = im.convert("L", matrix)
print(new_im.mode)
new_im.show()

图片尺寸

  • 获取图像的尺寸,以像素数计算,返回值为包含宽度和高度的二元组。
from PIL import Image

im = Image.open("picture.jpg")
print(im.size)
 

通道分离

  • 返回由当前图像各个通道组成的元组。
  • 分离一个RGB图像将生成三个新图像。
  • 这三个新图像分别对应原始图像的红色、绿色和蓝色通道。
from PIL import Image

im = Image.open("picture.jpg")

r,g,b = im.split()
print(r.mode)
print(r.size)
print(im.size)

复制、裁剪、粘贴、合并

from PIL import Image

im = Image.open("picture.jpg")
# 复制
im.copy()
# 裁剪
im.crop((100, 100, 400, 400))
# 将一张图粘贴到另一张图像上
im.paste(im.transpose(Image.ROTATE_180),im)
# 合并类使用一些单通道图像,创建一个新的图像
Image.merge("RGB", im.split())

几何变换

  • Image类提供resize()、rotate()、transpose()和transform()方法进行几何变换。
from PIL import Image

im = Image.open("picture.jpg")

# 修改尺寸
im.resize((128, 128))
# 角度旋转
im.rotate(45)
# 返回当前图像的翻转或者旋转的拷贝
# 值为:FLIP_LEFT_RIGHT,FLIP_TOP_BOTTOM,ROTATE_90,ROTATE_180,ROTATE_270
im.transpose(Image.ROTATE_90)
# 用给定的尺寸生成一张新的图像,与原图有相同的模式
im.transform((200, 200), Image.EXTENT, (0, 0, 300, 300))

高级图片处理

  • 使用ImageEnhance对象即可快速进行设置,可调整对比度、亮度、色平衡和锐利度。
from PIL import Image
from PIL import ImageEnhance

im = Image.open("picture.jpg")
enh = ImageEnhance.Contrast(im)
enh.enhance(1.3).show("30% more contrast")

滤波器处理

from PIL import Image
from PIL import ImageFilter

im = Image.open("picture.jpg")
# 均值滤波
im1 = im.filter(ImageFilter.BLUR)
# 找轮廓
im2 = im.filter(ImageFilter.CONTOUR)
# 边缘检测
im3 = im.filter(ImageFilter.FIND_EDGES)
im.show()
im1.show()
im2.show()
im3.show()

设置透明度合成两张图

  • 使用给定的两张图像及透明度变量alpha,生成一张新图像。
  • 变量alpha的取值范围为0到1之间。
  • 若变量alpha为0.0,返回第一张图像的拷贝;若变量alpha为1.0,将返回第二张图像的拷贝。
from PIL import Image

im1 = Image.open("picture1.jpg")
im2 = Image.open("picture2.jpg")
im = Image.blend(im1, im2, 0.30)
im.show()

设置模式合成两张图

  • 使用给定的两张图像及mask图像作为透明度,生成一张新图像。
  • 图像的模式可以为“1”、“L”或者“RGBA”。
  • 所有参与合成的图像必须有相同的尺寸。
from PIL import Image

im1 = Image.open("picture1.jpg")
im2 = Image.open("picture2.jpg")
im = Image.composite(im1, im2, 'L')
im.show()

草稿模式

  • 适用于对速度要求高于质量的场合。
  • 允许在不读取文件内容的情况下,尽可能(可能不会完全等于给定的参数)地将图片转成给定模式和大小,这在生成缩略图时非常有效。
from PIL import Image

im = Image.open("picture.jpg")

print(im.size,im.mode)
new_im = im.draft("L", (200,200))
print(new_im.size,new_im.mode)
new_im.show()

获取通道名称

  • 返回包含每个通道名称的元组。
  • 例如,对于RGB图像将返回(“R”,“G”,“B”)。
from PIL import Image

im = Image.open("picture.jpg")
print(im.getbands())

获取包围盒

  • 计算图像非零区域的包围盒。
  • 这个包围盒是一个4元组,定义了左、上、右和下像素坐标。
  • 如果图像是空的,这个方法将返回空。
from PIL import Image

im = Image.open("picture.jpg")
print(im.getbbox())

获取像素值

from PIL import Image

im = Image.open("picture.jpg")
print(im.getdata())

获取图片极值

  • 返回一个2元组。
  • 包括该图像中的最小和最大值。
from PIL import Image

im = Image.open("picture.jpg")
print(im.getextrema())

指定位置像素值

from PIL import Image

im = Image.open("picture.jpg")
print(im.getpixel((10,0)))

获取图像直方图

from PIL import Image

im = Image.open("picture.jpg")
im_histogram = im.histogram()
print(im_histogram[0])

内存分配

  • 为图像分配内存并从文件中加载它。
  • 返回一个用于读取和修改像素的像素访问对象。
from PIL import Image

im = Image.open("picture.jpg")
pix = im.load()
print(pix[0,2])

查找指定的帧

  • 在动态图中查找指定的帧。
  • 如果查找超越了序列的末尾,则产生一个EOFError异常。
  • 当文件被打开时,PIL库自动指定到第0帧上。
from PIL import Image

im_gif = Image.open("loading.gif")
print(im_gif.mode)
# 默认打开时是第0帧
im_gif.show()
im_gif.seek(1)
im_gif.show()
im_gif.seek(3)
im_gif.show()

获取当前帧位置

from PIL import Image

im_gif = Image.open("loading.gif")
print(im_gif.tell())
im_gif.seek(3)
print(im_gif.tell())

到此这篇关于python 包之 Pillow 图像处理教程分享的文章就介绍到这了,更多相关python Pillow 图像处理内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。