共计 2356 个字符,预计需要花费 6 分钟才能阅读完成。
图像处理是 Python 在数据分析、AI、Web 开发和自动化办公等领域中的常见任务之一。Pillow 是 Python 官方推荐的图像处理库,功能强大且易于使用。通过它,我们可以轻松实现图像的读取、裁剪、缩放、旋转、滤镜处理、格式转换等操作。
- 安装与导入 Pillow
Pillow 是 PIL(Python Imaging Library)的一个改进版本,首先需要安装:
pip install pillow
导入方式如下:
from PIL import Image
- 打开与显示图像
我们可以通过Image.open()方法加载图像,然后使用show()打开系统默认的图片查看器:
from PIL import Image
# 打开图像
img = Image.open('example.jpg')
# 显示图像
img.show()
Image.open() 会返回一个 Image 对象,通过它可以进一步操作图像,如查看属性:
print(img.format) # 图像格式,如 JPEG、PNG
print(img.size) # 图像尺寸 (宽, 高)
print(img.mode) # 图像模式,如 RGB、RGBA、L
- 保存图像与格式转换
可以用save()保存图片,也可以转换格式:
img.save('output.png') # 保存为 PNG 格式
img.convert('L').save('gray.jpg') # 转换为灰度图
通过 convert('L') 将彩色图像转换为灰度模式,是机器学习中常用的预处理方式。
- 调整图像大小与旋转
Pillow 提供多种图像几何变换方法:
# 调整大小
resized_img = img.resize((400, 300))
resized_img.save('resized.jpg')
# 旋转图像
rotated_img = img.rotate(45) # 顺时针旋转 45°
rotated_img.save('rotated.jpg')
# 翻转图像
flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT)
flipped_img.save('flipped.jpg')
- 裁剪图像
可以使用crop()方法截取指定区域:
# 定义裁剪区域 (左, 上, 右, 下)
box = (100, 100, 400, 400)
cropped_img = img.crop(box)
cropped_img.save('cropped.jpg')
这在处理人脸识别、验证码识别等任务时非常有用。
- 批量缩放图像示例
在实际工作中,我们常需要对一个文件夹下的所有图像进行批量处理,例如统一尺寸:
import os
from PIL import Image
input_folder = './images'
output_folder = './output'
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for filename in os.listdir(input_folder):
if filename.endswith(('.jpg', '.png', '.jpeg')):
img_path = os.path.join(input_folder, filename)
img = Image.open(img_path)
img_resized = img.resize((256, 256))
img_resized.save(os.path.join(output_folder, filename))
print(f"{filename} 已缩放完成 ")
这段代码将所有图片批量缩放为 256×256 并保存到输出文件夹中。
- 图像滤镜处理
Pillow 还支持多种滤镜效果,可以快速实现模糊、锐化等效果:
from PIL import ImageFilter
blurred = img.filter(ImageFilter.BLUR)
blurred.save('blurred.jpg')
sharpened = img.filter(ImageFilter.SHARPEN)
sharpened.save('sharpened.jpg')
滤镜在生成缩略图、识别前的图像清理等场景非常有用。
- 图像合并与粘贴
我们可以创建一个新图像,然后把其他图片粘贴进去,实现拼接或水印效果:
# 创建一个新图像
new_img = Image.new('RGB', (800, 400), color='white')
# 粘贴两张图片
img1 = Image.open('example1.jpg')
img2 = Image.open('example2.jpg')
new_img.paste(img1, (0, 0))
new_img.paste(img2, (400, 0))
new_img.save('merged.jpg')
- 添加文本水印
通过ImageDraw模块,我们可以在图片上添加文字水印:
from PIL import ImageDraw, ImageFont
img = Image.open('example.jpg')
draw = ImageDraw.Draw(img)
font = ImageFont.load_default()
draw.text((10, 10), "© Python 入门教程 ", fill="white", font=font)
img.save('watermarked.jpg')
总结:
Pillow 是 Python 图像处理的基础工具,几乎所有与图像相关的任务都可以通过它完成。从最基础的读取、保存,到复杂的裁剪、滤镜、批处理,它都提供了简洁的接口。熟练掌握 Pillow 是深入学习图像识别、计算机视觉等高级主题的重要基础。
练习与思考:
- 实现一个批量添加文字水印的脚本。
- 将指定文件夹中的所有图像转换为灰度图并保存。
- 尝试将两张图片拼接成一张对比图。
正文完