Python图片处理案例有哪些?

wen python案例 1

本文目录导读:

  1. 基础处理:Pillow(PIL)—— 最常用的图像处理库
  2. 科学计算与高级处理:OpenCV —— 计算机视觉标准库
  3. 数据分析可视化:Matplotlib + Seaborn —— 图表与图像矩阵
  4. 深度学习图像生成:Stable Diffusion + diffusers(HuggingFace)
  5. 自动化办公:ocr + PyTesseract —— 图片文字提取
  6. 图像修复与增强:RemBG + GFPGAN(AI 去背景/人脸修复)
  7. 短视频与Web应用:图像生成 GIF / 实时滤镜
  8. 快速对照表:不同需求该用哪个库?
  9. 学习路线建议

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 开箱即用,深度学习模型

学习路线建议

  1. 入门:先用 Pillow 处理常见需求(格式、大小、裁剪)。
  2. 进阶:学习 OpenCV 处理实时视频、特征检测。
  3. 专业方向:结合 PyTorch/TensorFlow 做物体检测、图像分割。
  4. 应用:用 StreamlitFlask 搭建图片处理 web 工具。

如果你有具体的图片处理需求(如批量处理、特定滤镜、AI 生成),可以告诉我,我可以给出更针对性的案例代码。

标签: Pillow OpenCV

抱歉,评论功能暂时关闭!