Python处理图像
Python处理图像:教学详解与实战指南
一、前言:为什么要用Python处理图像?
图像处理不仅是图形学、人工智能、游戏开发等专业领域的基础能力,在日常应用中也极具实用价值。比如:
- 为每一张照片加水印;
- 批量调整图片尺寸或格式;
- 自动生成验证码图片;
- 创建带图形的海报、证书或图表。
Python 提供了功能丰富的图像处理库,其中最常用的轻量工具是 Pillow,它是 PIL 的升级版。适用于图像基本处理、滤镜、剪裁、绘制、像素处理等任务。
二、基础知识科普:颜色 + 像素
1. 颜色:RGB三原色原理
在计算机中,颜色是由红(Red)、绿(Green)、蓝(Blue)三种色光叠加组成的:
颜色名称 | RGB值 | 说明 |
---|---|---|
White | (255, 255, 255) | 全亮白色 |
Black | (0, 0, 0) | 全暗黑色 |
Red | (255, 0, 0) | 纯红 |
Green | (0, 255, 0) | 纯绿 |
Blue | (0, 0, 255) | 纯蓝 |
Yellow | (255, 255, 0) | 红 + 绿 |
Purple | (128, 0, 128) | 红 + 蓝 |
2. 像素(Pixel):图像的最小单位
每张图片是由无数个像素点(小方格)组成的,每个像素都有自己的颜色值,像素越多,图像越清晰。
三、使用Pillow处理图像文件
安装 Pillow
pip install pillow
1. 图像读取与属性获取
from PIL import Image
image = Image.open('guido.jpg')
print(image.format) # 图像格式:JPEG
print(image.size) # 尺寸:如 (500, 750)
print(image.mode) # 模式:如 RGB
image.show() # 打开默认查看器显示图片
应用场景
- 快速预览图片;
- 获取尺寸用于缩放、裁切;
- 判断图片格式和通道数。
2. 裁剪图片
image.crop((80, 20, 310, 360)).show()
原理
- 参数为 (左,上,右,下) 的矩形区域坐标。
应用场景
- 剪出人脸、头像区域;
- 截取二维码、签名框。
3. 创建缩略图
image.thumbnail((128, 128))
image.show()
注意
- 原图会被修改,最好提前复制。
应用场景
- 电商网站商品图生成;
- 相册应用中的缩略图。
4. 缩放 + 黏贴图像(合成图)
luohao_image = Image.open('luohao.png')
guido_image = Image.open('guido.jpg')
head = guido_image.crop((80, 20, 310, 360))
luohao_image.paste(head.resize((150, 150)), (172, 40))
luohao_image.show()
应用场景
- 换脸、头像合成;
- 添加贴图(水印、角标)。
5. 旋转与翻转图像
image.rotate(45).show() # 旋转45度
image.transpose(Image.FLIP_TOP_BOTTOM).show() # 上下翻转
应用场景
- 修正拍摄角度;
- 制作镜像效果。
6. 操作像素(点对点处理)
for x in range(80, 310):
for y in range(20, 360):
image.putpixel((x, y), (128, 128, 128))
image.show()
应用场景
- 局部图像加密、马赛克;
- 手动实现图像处理算法。
7. 应用滤镜(增强图像效果)
from PIL import ImageFilter
image.filter(ImageFilter.CONTOUR).show()
其他滤镜示例
滤镜名称 | 效果描述 |
---|---|
BLUR |
模糊 |
DETAIL |
增强细节 |
EDGE_ENHANCE |
边缘增强 |
EMBOSS |
浮雕效果 |
SHARPEN |
锐化 |
应用场景
- 滤镜预设制作;
- 图像美化或卡通化处理。
四、使用Pillow绘图(绘制图形 + 添加文字)
示例:绘制图形和文字组合图
from PIL import Image, ImageDraw, ImageFont
import random
def random_color():
return tuple(random.randint(0, 255) for _ in range(3))
img = Image.new("RGB", (800, 600), (255, 255, 255))
draw = ImageDraw.Draw(img)
font = ImageFont.truetype("Kongxin.ttf", 32)
# 文本 + 十字交叉线
draw.text((300, 50), "Hello, world!", fill=(255, 0, 0), font=font)
draw.line((0, 0, 800, 600), fill=(0, 0, 255), width=2)
draw.line((800, 0, 0, 600), fill=(0, 0, 255), width=2)
# 中心矩形 + 多个椭圆
draw.rectangle((340, 240, 460, 360), outline=(255, 0, 0), width=2)
for i in range(4):
draw.ellipse((150 + i * 120, 220, 310 + i * 120, 380),
outline=random_color(), width=8)
img.show()
img.save("result.png")
功能说明
draw.text
:绘制文字;draw.line
:画线;draw.rectangle / ellipse
:画矩形、椭圆;- 支持字体加载、颜色设置、自定义宽度。
应用场景
- 自定义贺卡;
- 自动生成证书;
- 绘制图标或原型图。
五、最佳实践与典型场景对照表
任务需求 | 推荐方法 | 说明 |
---|---|---|
裁剪一批图像 | crop() + 循环文件处理 |
可封装为函数自动执行 |
批量生成缩略图 | thumbnail() |
注意不能重复使用原图 |
为图片加logo角标 | paste() |
可以搭配 resize 做缩放处理 |
添加水印文字 | ImageDraw.text() |
可使用自定义字体增强美观 |
滤镜效果批量处理 | Image.filter() |
适合图片增强与风格转换 |
验证码/图文生成 | ImageDraw + ImageFont |
搭配随机字符与颜色更强大 |
图像像素级处理 | putpixel() / load() |
适合开发算法、做灰度或特效处理 |
六、学习建议与练习任务
新手练习
- 读取一张照片并打印其格式、尺寸、颜色模式;
- 裁剪中间区域并显示;
- 生成缩略图保存为新文件。
进阶挑战
- 给每张证件照右下角加上“仅供报名”水印;
- 把自拍头像合成到另一张证件照模板;
- 批量处理图片文件夹:缩放+滤镜+添加文字;
- 绘制一个随机验证码图片,包含干扰线和随机字体。
七、总结与进阶方向
Pillow 提供了一个简单、直观且功能强大的图像处理接口,是 Python 初学者处理图像的首选工具。你可以:
- 批量改图减轻重复劳动;
- DIY 图文创意作品;
- 为更复杂的图像AI处理打下基础。
📌 进阶推荐:
- 学习 OpenCV 进行图像识别、特征提取、人脸检测等;
- 使用
numpy
+ Pillow 实现图像矩阵级处理; - 深入理解图像模式(RGBA/HSV/L模式等)。
欢迎继续深入图像世界!如果你希望我讲解 OpenCV 图像处理、AI图像识别或批量图像改名/重命名工具,请继续提问~