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

Written by

in

文章目录
  • 在 Python 的图像处理世界里,Pillow 是最经典、最实用、也是最常用的基础库之一。它是 Python Imaging Library (PIL) 的一个分支,经过多年更新与维护,如今已经成为 Python 图像处理的事实标准。 Pillow 能够完成从基础到高级的几乎所有图像任务: 打开、显示、保存各种图像格式(JPEG、PNG、BMP、TIFF 等) 进行图像的缩放、裁剪、旋转、翻转、滤镜和增强 添加文字、水印、几何图形 批量图像处理 与 NumPy、OpenCV、TensorFlow 等配合做 AI 图像预处理 本文将系统介绍 Pillow 的功能、核心模块、使用技巧与进阶实践。无论你是初学者,还是图像算法工程师,都能从中获得启发。
  • Pillow 允许直接访问像素进行操作。
  • Pillow 提供了多个增强模块,可提升图像质量或增加特效。
  • Pillow 自带 ImageDraw 模块,可以在图片上绘制文字与几何图形。
  • 在 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)
  • Web 后端图像服务:用户头像上传、压缩、裁剪。 数据增强:用于机器学习模型的训练样本扩展。 图像内容生成:自动化生成海报、证件照、表情包。 OCR 预处理:文字识别前的灰度化、二值化。 视频帧处理:结合 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 功能强大,但也有一些局限性: 局限 替代或补充 无 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中使用Pillow库生成立体文字的图像 python使用Pillow创建可自定义的图标生成器 使用Python和Pillow实现图片马赛克功能 Python的图像处理库Pillow安装与使用教程 Python使用PyPDF2 Pillow库来将PDF文件转图片 Python图像处理Pillow库的安装使用 Python使用Pillow进行图像处理 基于python使用Pillow做动态图在图中生成二维码以及图像处理 python pillow库的基础使用教程
  • 目录
    • 一、前言:为什么选择 Pillow?
    • 二、安装与快速上手
      • 1. 安装 Pillow
      • 2. 快速体验
    • 三、图像的基础操作
      • 1. 图像的属性
      • 2. 图像的裁剪与缩放
        • (1)裁剪
        • (2)缩放
      • 3. 旋转与翻转
        • 4. 颜色模式转换
        • 四、像素级操作
          • 1. getpixel() 与 putpixel()
            • 2. 使用 NumPy 操作像素
            • 五、图像增强与滤镜
              • 1. 图像增强模块
                • 2. 图像滤镜
                • 六、绘图与文字处理
                  • 1. 绘制几何图形
                    • 2. 绘制文字
                    • 七、图像通道与混合
                      • 1. 通道拆分与合并
                        • 2. 图像混合与透明度控制
                        • 八、图像格式与批处理
                          • 1. 图像格式转换
                            • 2. 批量处理示例
                            • 九、高级技巧与性能优化
                              • 1. 懒加载机制
                                • 2. 压缩与节省空间
                                  • 3. 缓存优化
                                  • 十、Pillow + AI 图像预处理
                                    • 十一、Pillow 在项目中的应用场景
                                      • 十二、实战案例:自动生成带水印的缩略图
                                        • 十三、Pillow 的局限与替代方案
                                          • 十四、总结与展望
                                            • ✅ 结语

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

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

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

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

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

                                              pip install pillow
                                              

                                              验证是否安装成功:

                                              from PIL import Image
                                              print(Image.__version__)
                                              

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

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

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

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

                                              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

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

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

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

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

                                              from PIL import Image
                                              
                                              img.resize((200, 200), Image.Resampling.LANCZOS)
                                              

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

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

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

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

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

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

                                              与 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 提供了多个增强模块,可提升图像质量或增加特效。

                                              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()
                                              

                                              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 模块,可以在图片上绘制文字与几何图形。

                                              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)

                                              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()

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

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

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

                                              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()

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

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

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

                                              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")

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

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

                                              这能有效节省内存。

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

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

                                              img.thumbnail((300, 300))
                                              

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

                                              在 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)
                                              

                                              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 功能强大,但也有一些局限性:

                                              局限 替代或补充
                                              无 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中使用Pillow库生成立体文字的图像
                                              • python使用Pillow创建可自定义的图标生成器
                                              • 使用Python和Pillow实现图片马赛克功能
                                              • Python的图像处理库Pillow安装与使用教程
                                              • Python使用PyPDF2 Pillow库来将PDF文件转图片
                                              • Python图像处理Pillow库的安装使用
                                              • Python使用Pillow进行图像处理
                                              • 基于python使用Pillow做动态图在图中生成二维码以及图像处理
                                              • python pillow库的基础使用教程

                                              站内搜索