Python 图像处理实战指南
Python 拥有强大的生态库,在图像处理领域表现尤为出色。通过 Pillow、NumPy、WordCloud 等库,我们可以实现从基础格式转换到复杂视觉效果生成的多种功能。本文详细介绍五个实用的图像处理案例,涵盖手绘风格转换、证件照制作、艺术二维码、词云生成及九宫格切图,并提供完整的代码示例与逻辑解析。
环境准备
在开始之前,请确保已安装 Python 3.x 环境,并通过 pip 安装以下依赖库:
pip install pillow numpy wordcloud myqr removebg
- Pillow: Python 图像处理的核心库,基于 PIL。
- NumPy: 用于高效的数组运算,处理像素数据。
- WordCloud: 专门用于生成词云的第三方库。
- MyQR: 用于生成带图片背景的二维码。
- RemoveBg: 用于 AI 自动抠图的 API 客户端(需申请 Key)。
1. 生成手绘图片
许多软件支持将照片转换为素描或手绘风格,利用 Python 的 Pillow 和 NumPy 库,我们可以自定义算法实现更灵活的批量转换。
原理分析
该算法的核心思想是利用图像灰度值的梯度来模拟光照下的阴影效果。具体步骤如下:
- 将原图转换为灰度图。
- 计算灰度图像的梯度(Gradient),反映像素变化的剧烈程度。
- 根据设定的光源方向向量,计算每个像素点的法线方向。
- 结合梯度与光源向量,计算最终的光照强度值。
- 将结果映射回 0-255 的灰度范围并保存。
代码实现
# -*- coding: UTF-8 -*-
from PIL import Image
import numpy as np
# 配置路径
original_image_path = "input.jpg"
handdrawn_image_path = "output_handdrawn.jpg"
try:
# 加载原图并转换为灰度模式
img = Image.open(original_image_path).convert('L')
a = np.asarray(img).astype('float')
depth = 10.0
# 计算图像灰度的梯度值
grad = np.gradient(a)
grad_x, grad_y = grad
# 调整梯度幅度
grad_x = grad_x * depth / 100.0
grad_y = grad_y * depth / 100.0
# 计算归一化因子
A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
uni_x = grad_x / A
uni_y = grad_y / A
uni_z = / A
vec_el = np.pi /
vec_az = np.pi /
dx = np.cos(vec_el) * np.cos(vec_az)
dy = np.cos(vec_el) * np.sin(vec_az)
dz = np.sin(vec_el)
b = * (dx * uni_x + dy * uni_y + dz * uni_z)
b = np.clip(b, , ).astype()
im = Image.fromarray(b)
im.save(handdrawn_image_path)
()
FileNotFoundError:
()
Exception e:
()


