本文目录导读:
- 基础处理:Pillow(PIL)—— 最常用的图像处理库
- 科学计算与高级处理:OpenCV —— 计算机视觉标准库
- 数据分析可视化:Matplotlib + Seaborn —— 图表与图像矩阵
- 深度学习图像生成:Stable Diffusion + diffusers(HuggingFace)
- 自动化办公:ocr + PyTesseract —— 图片文字提取
- 图像修复与增强:RemBG + GFPGAN(AI 去背景/人脸修复)
- 短视频与Web应用:图像生成 GIF / 实时滤镜
- 快速对照表:不同需求该用哪个库?
- 学习路线建议
Python 的图片处理生态非常丰富,涵盖了从基础处理到深度学习应用的方方面面,以下整理了七大热门方向的实战案例,每个案例都包含核心库和简单代码示例,方便你直接运行和理解。
基础处理:Pillow(PIL)—— 最常用的图像处理库
案例1:批量转换格式与缩略图(适合图片格式统一、压缩)
from PIL import Image
import os
def batch_resize(input_dir, output_dir, size=(800, 600)):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for filename in os.listdir(input_dir):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
img = Image.open(os.path.join(input_dir, filename))
img = img.resize(size, Image.LANCZOS)
# 转换为 JPEG 并压缩质量
img.save(os.path.join(output_dir, f"{filename.split('.')[0]}.jpg"), quality=85)
print(f"处理完成: {filename}")
# 使用示例
batch_resize("./origin", "./resized", (1024, 768))
案例2:图像水印添加
from PIL import Image, ImageDraw, ImageFont
def add_watermark(image_path, text="©2024"):
img = Image.open(image_path).convert("RGBA")
# 创建一个透明层用于绘制文字
overlay = Image.new("RGBA", img.size, (255, 255, 255, 0))
draw = ImageDraw.Draw(overlay)
font = ImageFont.truetype("arial.ttf", 36)
# 在右下角绘制半透明文字
draw.text((img.width - 200, img.height - 50), text, fill=(255, 255, 255, 128), font=font)
watermarked = Image.alpha_composite(img, overlay)
watermarked.save("./watermarked.png")
add_watermark("photo.jpg")
科学计算与高级处理:OpenCV —— 计算机视觉标准库
案例3:人脸检测(适合实时摄像头或照片)
import cv2
def detect_faces(image_path):
# 加载预训练的 Haar 级联分类器(OpenCV 自带模型文件)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
img = cv2.imread(image_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 显示结果
cv2.imshow("Face Detection", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
detect_faces("group_photo.jpg")
案例4:图像风格化(卡通效果)
import cv2
import numpy as np
def cartoonize(image_path):
img = cv2.imread(image_path)
# 1. 应用双边滤波器平滑颜色,保留边缘
color = cv2.bilateralFilter(img, d=9, sigmaColor=300, sigmaSpace=300)
# 2. 边缘检测与二值化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, 10)
# 3. 合并颜色和边缘
cartoon = cv2.bitwise_and(color, color, mask=cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR))
cv2.imshow("Cartoon", cartoon)
cv2.waitKey(0)
cartoonize("photo.jpg")
数据分析可视化:Matplotlib + Seaborn —— 图表与图像矩阵
案例5:图像直方图与色彩分析
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
def plot_color_histogram(image_path):
img = Image.open(image_path)
# 将图像转换为一维数组(方便统计)
img_array = np.array(img)
colors = ('r', 'g', 'b')
plt.figure(figsize=(10, 4))
for i, color in enumerate(colors):
# 统计每个通道的像素值分布
hist = cv2.calcHist([img_array], [i], None, [256], [0, 256])
plt.plot(hist, color=color, label=f'{color.upper()} channel')
plt.title('RGB Color Histogram')
plt.legend()
plt.show()
import cv2 # 这里使用 cv2 的 calcHist 更高效
plot_color_histogram("colorful.jpg")
深度学习图像生成:Stable Diffusion + diffusers(HuggingFace)
案例6:文字生成图片(Text-to-Image)
from diffusers import StableDiffusionPipeline
import torch
def generate_image_from_text(prompt, output_path="generated.png"):
# 加载模型(首次运行会自动下载,约 2-4GB)
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
pipe = pipe.to("cuda") # 如果有 GPU 则用 cuda,否则用 cpu(较慢)
# 生成图片
image = pipe(prompt, num_inference_steps=50).images[0]
image.save(output_path)
print(f"图片已保存: {output_path}")
# 使用示例(建议在 Jupyter 或 Colab 中运行)
generate_image_from_text("a cat sitting on a stack of books, digital art, high quality")
自动化办公:ocr + PyTesseract —— 图片文字提取
案例7:身份证、发票等图片文字识别
import pytesseract
from PIL import Image
def extract_text_from_image(image_path, lang='chi_sim+eng'):
"""
识别图片中的文字(支持中英文)
需要预先安装 Tesseract-OCR 引擎和中文语言包 (https://github.com/tesseract-ocr/tesseract)
"""
img = Image.open(image_path)
# 使用 pytesseract 识别
text = pytesseract.image_to_string(img, lang=lang)
print("识别结果:\n", text)
return text
# 示例
extract_text_from_image("receipt.jpg", lang='chi_sim')
图像修复与增强:RemBG + GFPGAN(AI 去背景/人脸修复)
案例8:抠图(去除背景)
from rembg import remove
from PIL import Image
def remove_background(input_path, output_path="no_bg.png"):
with open(input_path, "rb") as f:
input_data = f.read()
output_data = remove(input_data) # 返回 bytes
with open(output_path, "wb") as f:
f.write(output_data)
print("背景已去除")
# 使用示例
remove_background("person.png", "person_no_bg.png")
短视频与Web应用:图像生成 GIF / 实时滤镜
案例9:从多张图片制作 GIF
from PIL import Image
import glob
def make_gif(image_folder, output_path="animation.gif", duration=200):
# 读取文件夹内所有 .png 或 .jpg 文件
images = []
for file in sorted(glob.glob(f"{image_folder}/*.png")): # 建议按文件名排序
images.append(Image.open(file))
if images:
# 保存为 GIF,loop=0 表示无限循环
images[0].save(output_path, save_all=True, append_images=images[1:], duration=duration, loop=0)
print(f"GIF 已生成: {output_path}")
make_gif("./frames", "my_animation.gif", duration=150)
快速对照表:不同需求该用哪个库?
| 需求场景 | 推荐库 | 特点 |
|---|---|---|
| 图片裁剪、缩放、格式转换 | Pillow(PIL) | 简单、内建函数丰富 |
| 人脸检测、边缘提取、相机操作 | OpenCV | 速度快、功能全、工业级 |
| 深度学习图像生成/分类 | diffusers / torch | 支持前沿模型 |
| 文字识别(OCR) | pytesseract | 依赖 Tesseract 引擎 |
| 数据分析可视化 | matplotlib/seaborn | 强大的绘图能力 |
| 去背景、AI 修复 | rembg / GFPGAN | 开箱即用,深度学习模型 |
学习路线建议
- 入门:先用 Pillow 处理常见需求(格式、大小、裁剪)。
- 进阶:学习 OpenCV 处理实时视频、特征检测。
- 专业方向:结合 PyTorch/TensorFlow 做物体检测、图像分割。
- 应用:用 Streamlit 或 Flask 搭建图片处理 web 工具。
如果你有具体的图片处理需求(如批量处理、特定滤镜、AI 生成),可以告诉我,我可以给出更针对性的案例代码。