Python处理图像
基础教学 1 min read

Python处理图像

Blog Author

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() 适合开发算法、做灰度或特效处理

六、学习建议与练习任务

新手练习

  1. 读取一张照片并打印其格式、尺寸、颜色模式;
  2. 裁剪中间区域并显示;
  3. 生成缩略图保存为新文件。

进阶挑战

  1. 给每张证件照右下角加上“仅供报名”水印;
  2. 把自拍头像合成到另一张证件照模板;
  3. 批量处理图片文件夹:缩放+滤镜+添加文字;
  4. 绘制一个随机验证码图片,包含干扰线和随机字体。

七、总结与进阶方向

Pillow 提供了一个简单、直观且功能强大的图像处理接口,是 Python 初学者处理图像的首选工具。你可以:

  • 批量改图减轻重复劳动;
  • DIY 图文创意作品;
  • 为更复杂的图像AI处理打下基础。

📌 进阶推荐

  • 学习 OpenCV 进行图像识别、特征提取、人脸检测等;
  • 使用 numpy + Pillow 实现图像矩阵级处理;
  • 深入理解图像模式(RGBA/HSV/L模式等)。

欢迎继续深入图像世界!如果你希望我讲解 OpenCV 图像处理、AI图像识别或批量图像改名/重命名工具,请继续提问~