Python 图像处理Pillow安装、使用实战应用小结

 更新时间:2025年11月10日 10:30:36   作者:萧鼎  
Pillow是Python中功能强大的图像处理库,支持多种图像格式和操作,本文介绍了Pillow的安装、基础操作、像素级操作、图像增强、绘图与文字处理、图像通道与混合、图像格式与批处理、高级技巧与性能优化,以及Pillow在AI图像预处理中的应用,感兴趣的朋友跟随小编一起看看吧

一、前言:为什么选择 Pillow?

在 Python 的图像处理世界里,Pillow 是最经典、最实用、也是最常用的基础库之一。
它是 Python Imaging Library (PIL) 的一个分支,经过多年更新与维护,如今已经成为 Python 图像处理的事实标准。

Pillow 能够完成从基础到高级的几乎所有图像任务:

  • 打开、显示、保存各种图像格式(JPEG、PNG、BMP、TIFF 等)
  • 进行图像的缩放、裁剪、旋转、翻转、滤镜和增强
  • 添加文字、水印、几何图形
  • 批量图像处理
  • 与 NumPy、OpenCV、TensorFlow 等配合做 AI 图像预处理

本文将系统介绍 Pillow 的功能、核心模块、使用技巧与进阶实践。
无论你是初学者,还是图像算法工程师,都能从中获得启发。

二、安装与快速上手

1. 安装 Pillow

在大多数 Python 环境中,Pillow 可以直接通过 pip 安装:

pip install pillow

验证是否安装成功:

from PIL import Image
print(Image.__version__)

如果能正常输出版本号,例如 10.2.0,说明 Pillow 已正确安装。

2. 快速体验

我们从一个最简单的例子开始,打开并显示一张图片:

from PIL import Image
# 打开图像
img = Image.open("example.jpg")
# 显示图像
img.show()
# 保存为另一种格式
img.save("example_converted.png")

是不是很简单?
仅几行代码,你就能完成打开、显示、格式转换等操作。

三、图像的基础操作

1. 图像的属性

Pillow 的 Image 对象包含了大量信息:

img = Image.open("example.jpg")
print(img.format)   # 图像格式,如 JPEG
print(img.size)     # (宽, 高)
print(img.mode)     # 模式,如 RGB、RGBA、L、CMYK

常见模式说明:

模式含义通道数
1黑白(二值)1
L灰度图像1
RGB彩色图像3
RGBA含透明度通道的彩色图像4
CMYK印刷常用颜色空间4

2. 图像的裁剪与缩放

(1)裁剪

box = (100, 100, 400, 400)
region = img.crop(box)
region.show()

box 表示左上角和右下角的坐标 (left, upper, right, lower)

(2)缩放

resized = img.resize((200, 200))
resized.show()

可以选择不同的插值算法:

from PIL import Image

img.resize((200, 200), Image.Resampling.LANCZOS)

3. 旋转与翻转

# 顺时针旋转45度
rotated = img.rotate(45)
# 水平翻转
flipped = img.transpose(Image.FLIP_LEFT_RIGHT)
# 垂直翻转
flipped_v = img.transpose(Image.FLIP_TOP_BOTTOM)

4. 颜色模式转换

gray = img.convert("L")   # 转灰度
rgba = img.convert("RGBA")

常用于人脸检测、OCR 前的预处理。

四、像素级操作

Pillow 允许直接访问像素进行操作。

1. getpixel() 与 putpixel()

r, g, b = img.getpixel((10, 10))
print(r, g, b)
img.putpixel((10, 10), (255, 0, 0))

可用于修改单个像素、绘制特定形状。

2. 使用 NumPy 操作像素

与 NumPy 结合可以极大提高效率:

import numpy as np
from PIL import Image
img = Image.open("example.jpg")
arr = np.array(img)
# 反转颜色
arr = 255 - arr
Image.fromarray(arr).show()

NumPy 让 Pillow 具备了更高的灵活性,常用于 AI 模型前的图像预处理。

五、图像增强与滤镜

Pillow 提供了多个增强模块,可提升图像质量或增加特效。

1. 图像增强模块

from PIL import ImageEnhance
enhancer = ImageEnhance.Brightness(img)
bright = enhancer.enhance(1.5)  # 提亮 50%
bright.show()

常见增强类型:

模块功能
ImageEnhance.Brightness亮度
ImageEnhance.Contrast对比度
ImageEnhance.Color饱和度
ImageEnhance.Sharpness锐度

例如:

ImageEnhance.Contrast(img).enhance(2.0).show()

2. 图像滤镜

Pillow 提供了丰富的滤镜功能:

from PIL import ImageFilter
# 模糊
blurred = img.filter(ImageFilter.BLUR)
# 边缘增强
edge = img.filter(ImageFilter.EDGE_ENHANCE)
# 轮廓
contour = img.filter(ImageFilter.CONTOUR)

其他常用滤镜包括:

  • ImageFilter.SHARPEN:锐化
  • ImageFilter.EMBOSS:浮雕
  • ImageFilter.FIND_EDGES:边缘检测
  • ImageFilter.SMOOTH:平滑

六、绘图与文字处理

Pillow 自带 ImageDraw 模块,可以在图片上绘制文字与几何图形。

1. 绘制几何图形

from PIL import ImageDraw
draw = ImageDraw.Draw(img)
draw.rectangle((50, 50, 200, 200), outline="red", width=3)
draw.ellipse((100, 100, 180, 180), fill="blue")
draw.line((0, 0, 300, 300), fill="green", width=2)

2. 绘制文字

from PIL import ImageFont, ImageDraw
font = ImageFont.truetype("arial.ttf", 36)
draw = ImageDraw.Draw(img)
draw.text((50, 50), "Hello Pillow!", fill="yellow", font=font)
img.show()

可以用于生成水印、验证码、封面图等。

七、图像通道与混合

1. 通道拆分与合并

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

可以单独调整某个通道的亮度或对比度。

2. 图像混合与透明度控制

from PIL import Image
img1 = Image.open("a.jpg")
img2 = Image.open("b.jpg").resize(img1.size)
blended = Image.blend(img1, img2, alpha=0.5)
blended.show()

八、图像格式与批处理

1. 图像格式转换

Pillow 支持大量格式(JPEG、PNG、BMP、TIFF、ICO、WEBP 等):

img.save("output.webp", "WEBP", quality=90)

2. 批量处理示例

下面的脚本能自动遍历文件夹中的所有图片并压缩尺寸:

import os
from PIL import Image
def batch_resize(input_dir, output_dir, size=(512, 512)):
    os.makedirs(output_dir, exist_ok=True)
    for file in os.listdir(input_dir):
        if file.endswith(('.jpg', '.png')):
            path = os.path.join(input_dir, file)
            img = Image.open(path)
            img = img.resize(size)
            img.save(os.path.join(output_dir, file))
    print("✅ 批量处理完成!")
batch_resize("images", "resized")

九、高级技巧与性能优化

1. 懒加载机制

Image.open() 实际上不会立即读取所有像素,而是延迟加载,直到需要时才读取。

img = Image.open("large.jpg")
print(img.size)  # 不会立即加载整个文件

这能有效节省内存。

2. 压缩与节省空间

img.save("compressed.jpg", quality=70, optimize=True)
  • quality 控制压缩率(1–95)
  • optimize 自动优化存储结构

3. 缓存优化

在批量处理中,可以启用线程池或使用 Image.thumbnail() 自动生成缩略图:

img.thumbnail((300, 300))

相比 resize()thumbnail() 会保持纵横比,并在原地修改。

十、Pillow + AI 图像预处理

在 AI 模型训练前,图像预处理是关键环节。
Pillow 与 NumPy 结合,可以轻松完成:

from PIL import Image
import numpy as np
def preprocess_image(path):
    img = Image.open(path).convert("RGB").resize((224, 224))
    arr = np.array(img) / 255.0
    return arr

配合 PyTorch 或 TensorFlow:

import torch
tensor = torch.tensor(preprocess_image("cat.jpg")).permute(2, 0, 1).unsqueeze(0)

十一、Pillow 在项目中的应用场景

  1. Web 后端图像服务:用户头像上传、压缩、裁剪。
  2. 数据增强:用于机器学习模型的训练样本扩展。
  3. 图像内容生成:自动化生成海报、证件照、表情包。
  4. OCR 预处理:文字识别前的灰度化、二值化。
  5. 视频帧处理:结合 OpenCV 对视频帧进行逐帧处理。

十二、实战案例:自动生成带水印的缩略图

from PIL import Image, ImageDraw, ImageFont
import os
def watermark_and_resize(input_path, output_path, watermark_text="© MySite"):
    img = Image.open(input_path).convert("RGBA")
    img.thumbnail((400, 400))
    watermark = Image.new("RGBA", img.size, (0,0,0,0))
    draw = ImageDraw.Draw(watermark)
    font = ImageFont.truetype("arial.ttf", 20)
    draw.text((10, img.size[1]-30), watermark_text, fill=(255,255,255,128), font=font)
    combined = Image.alpha_composite(img, watermark)
    combined.save(output_path, "PNG")
for file in os.listdir("images"):
    if file.endswith(".jpg"):
        watermark_and_resize(f"images/{file}", f"output/{file}")

结果:每张图片都会自动生成一个带透明水印的缩略图。

十三、Pillow 的局限与替代方案

虽然 Pillow 功能强大,但也有一些局限性:

局限替代或补充
无 GPU 加速OpenCV / PyTorch Vision
处理大图性能不足NumPy + CuPy
高级图像分割 / 检测需结合深度学习框架

但在轻量任务、Web 服务、脚本工具中,Pillow 的性能与稳定性仍无可替代。

十四、总结与展望

Pillow 是 Python 图像处理的“瑞士军刀”,
它的优势在于:

  • 简单易用,API 清晰
  • 支持广泛的格式与操作
  • 可与 NumPy、OpenCV、AI 框架无缝结合
  • 适合脚本、Web、AI 各类场景

未来,随着图像 AI 的发展,Pillow 仍将作为图像预处理的基础层存在。
它不会被取代,而是被融合到更高层次的智能图像系统中。

✅ 结语

无论你是刚开始学习 Python 图像处理的学生,
还是正在开发 AI 图像识别系统的工程师,
掌握 Pillow 是你进入图像世界的第一步。

到此这篇关于Python 图像处理利器:Pillow 深度详解与实战应用的文章就介绍到这了,更多相关Python Pillow图像处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python根据路径导入模块的方法

    python根据路径导入模块的方法

    这篇文章主要介绍了python根据路径导入模块的方法,分析了传统方法与改进方法,具有一定的实用价值,需要的朋友可以参考下
    2014-09-09
  • python的函数和方法(上)

    python的函数和方法(上)

    这篇文章主要为大家详细介绍了python的函数和方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)

    python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)

    这篇文章主要介绍了python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形) ,需要的朋友可以参考下
    2019-05-05
  • pycharm远程linux开发和调试代码的方法

    pycharm远程linux开发和调试代码的方法

    这篇文章主要介绍了pycharm远程linux开发和调试代码的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • python的去重以及数据合并的用法说明

    python的去重以及数据合并的用法说明

    这篇文章主要介绍了python的去重以及数据合并的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python获取文件ssdeep值的方法

    Python获取文件ssdeep值的方法

    这篇文章主要介绍了Python获取文件ssdeep值的方法,是一个比较实用的技巧,本文详细讲述了实现这一功能的具体步骤及相关注意事项,需要的朋友可以参考下
    2014-10-10
  • python+pyhyper实现识别图片中的车牌号思路详解

    python+pyhyper实现识别图片中的车牌号思路详解

    最近领导给布置了一个基于图片识别车牌号的工具开发任务,然后就去研究实现逻辑,自己根据opencv写了一个小demo,发现不仅速度慢而且成功率极低。然后,就找到了Hyperlpr开源项目,这篇文章主要介绍了python+pyhyper实现识别图片中的车牌号,需要的朋友可以参考下
    2022-12-12
  • 使用Python脚本轻松实现文件的批量重命名

    使用Python脚本轻松实现文件的批量重命名

    在日常工作和学习中,我们经常会遇到需要批量重命名文件的情况,无论是整理照片、文档还是其他类型的文件,手动一个个修改既费时又容易出错,今天,我将分享一个简单而强大的Python脚本,帮助你轻松实现文件的批量重命名,需要的朋友可以参考下
    2025-11-11
  • python库geopandas读取写入空间数据及绘图实例探索

    python库geopandas读取写入空间数据及绘图实例探索

    这篇文章主要为大家介绍了python库geopandas读取写入空间数据及绘图实例探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2024-02-02
  • Python使用post及get方式提交数据的实例

    Python使用post及get方式提交数据的实例

    今天小编就为大家分享一篇关于Python使用post及get方式提交数据的实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01

最新评论