当前位置: 首页 > news >正文

手绘头像风格迁移工具,上传真人照片,选择风格,(Q版/写实/复古),自动生成对应风格手绘头像,支持微调五官,帮助博主快速出图。

我帮你写了一个手绘头像风格迁移工具,用Python+PIL实现真人照片到Q版/写实/复古风格的转换,支持五官微调和高清导出,模块化设计注释清晰,附README、使用说明和核心知识点卡片,直接可用。

手绘头像风格迁移工具

一、Python代码实现

import argparse

from PIL import Image, ImageFilter, ImageEnhance, ImageOps

import os

import math

def load_style_config():

"""

加载风格迁移配置:定义Q版/写实/复古的参数模板

返回:风格参数字典(含色彩调整、线条处理、五官比例等)

"""

return {

"Q版": {

"色彩": {"饱和度": 1.3, "亮度": 1.1}, # 高饱和明亮

"线条": {"简化度": 0.6, "粗细": 2}, # 简化线条+粗轮廓

"五官比例": {"眼宽倍数": 1.5, "嘴高倍数": 0.8} # 大眼小嘴

},

"写实": {

"色彩": {"饱和度": 1.0, "亮度": 1.0}, # 自然还原

"线条": {"简化度": 0.9, "粗细": 1}, # 保留细节

"五官比例": {"眼宽倍数": 1.0, "嘴高倍数": 1.0} # 正常比例

},

"复古": {

"色彩": {"饱和度": 0.7, "亮度": 0.9, "色调": "sepia"}, # 棕褐色调

"线条": {"简化度": 0.7, "粗细": 1.5}, # 中等线条+颗粒感

"五官比例": {"眼宽倍数": 0.9, "嘴高倍数": 1.1} # 含蓄表情

}

}

def load_image(input_path):

"""读取输入图像并转为RGB模式"""

try:

img = Image.open(input_path).convert("RGB")

return img

except Exception as e:

raise ValueError(f"图像读取失败:{str(e)}")

def apply_color_adjustment(img, style_cfg):

"""应用风格化色彩调整(饱和度/亮度/色调)"""

# 饱和度调整

enhancer = ImageEnhance.Color(img)

img = enhancer.enhance(style_cfg["色彩"]["饱和度"])

# 亮度调整

enhancer = ImageEnhance.Brightness(img)

img = enhancer.enhance(style_cfg["色彩"]["亮度"])

# 复古棕褐色调特殊处理

if style_cfg["色彩"].get("色调") == "sepia":

width, height = img.size

pixels = img.load()

for x in range(width):

for y in range(height):

r, g, b = pixels[x, y]

tr = int(0.393*r + 0.769*g + 0.189*b)

tg = int(0.349*r + 0.686*g + 0.168*b)

tb = int(0.272*r + 0.534*g + 0.131*b)

pixels[x, y] = (min(tr,255), min(tg,255), min(tb,255))

return img

def apply_line_effect(img, style_cfg):

"""应用线条效果(简化度/粗细/颗粒感)"""

# 线条简化(高斯模糊模拟)

blur_radius = 1 + (1 - style_cfg["线条"]["简化度"]) * 3 # 简化度越低模糊越强

img = img.filter(ImageFilter.GaussianBlur(radius=blur_radius))

# 轮廓强化(边缘检测+叠加)

edge = img.filter(ImageFilter.FIND_EDGES)

edge = ImageOps.invert(edge) # 反相使边缘为白色

img = Image.blend(img, edge, alpha=style_cfg["线条"]["粗细"]/5) # 按粗细系数叠加

# 复古颗粒感添加

if "复古" in style_cfg:

noise = Image.effect_noise(img.size, 20) # 生成噪声层

img = Image.blend(img.convert("L").convert("RGB"), noise.convert("RGB"), alpha=0.1)

return img

def adjust_facial_features(img, style_cfg, eye_scale=1.0, mouth_scale=1.0):

"""

微调五官比例(简化版:通过图像缩放模拟眼嘴大小变化)

参数:eye_scale-眼睛缩放倍数,mouth_scale-嘴巴缩放倍数

"""

# 实际项目可结合人脸关键点检测(如dlib)精确定位,此处简化为整体调整

if eye_scale != 1.0:

# 模拟大眼:局部区域缩放(假设眼睛在图像上半部分)

w, h = img.size

eye_area = img.crop((0, 0, w, h//3)) # 截取上半部分模拟眼部区域

new_eye = eye_area.resize((int(w*eye_scale), int(h//3*eye_scale)), Image.Resampling.LANCZOS)

img.paste(new_eye.resize((w, h//3)), (0, 0)) # 放回原位置

if mouth_scale != 1.0:

# 模拟嘴型变化:下半部分缩放

w, h = img.size

mouth_area = img.crop((0, h*2//3, w, h)) # 截取下半部分模拟嘴部区域

new_mouth = mouth_area.resize((int(w*mouth_scale), int(h//3*mouth_scale)), Image.Resampling.LANCZOS)

img.paste(new_mouth.resize((w, h//3)), (0, h*2//3))

return img

def export_image(img, output_dir, style, input_name):

"""导出高清头像(PNG格式,300dpi)"""

os.makedirs(output_dir, exist_ok=True)

base_name = os.path.splitext(input_name)[0]

output_path = f"{output_dir}/{base_name}_{style}.png"

img.save(output_path, dpi=(300, 300), quality=95)

return output_path

def main():

"""程序入口:解析参数→处理图像→输出结果"""

parser = argparse.ArgumentParser(description="手绘头像风格迁移工具(真人照→Q版/写实/复古)")

parser.add_argument("--input", required=True, help="输入真人照片路径(如./photo.jpg)")

parser.add_argument("--style", required=True, choices=["Q版", "写实", "复古"], help="目标风格")

parser.add_argument("--eye-scale", type=float, default=1.0, help="眼睛缩放倍数(默认1.0,Q版建议1.5)")

parser.add_argument("--mouth-scale", type=float, default=1.0, help="嘴巴缩放倍数(默认1.0,Q版建议0.8)")

args = parser.parse_args()

try:

# 加载配置与图像

style_cfg = load_style_config()[args.style]

img = load_image(args.input)

# 风格化处理流程

img = apply_color_adjustment(img, style_cfg) # 色彩调整

img = apply_line_effect(img, style_cfg) # 线条与质感

img = adjust_facial_features(img, style_cfg, args.eye_scale, args.mouth_scale) # 五官微调

# 导出结果

output_dir = "手绘头像输出"

output_path = export_image(img, output_dir, args.style, os.path.basename(args.input))

print(f"\n✨ 风格迁移完成!文件已保存至:\n📁 {output_path}")

except Exception as e:

print(f"❌ 处理失败:{str(e)}")

if __name__ == "__main__":

main()

二、README文件内容

# 手绘头像风格迁移工具

## 简介

本工具将真人照片自动转换为**Q版/写实/复古**三种手绘风格头像,支持**五官微调**(眼睛/嘴巴缩放),输出高清PNG(300dpi),帮助博主快速生成个性化头像。基于Python+PIL开发,模块化设计易扩展。

## 安装要求

- Python 3.8+

- 依赖库:`pip install pillow`

## 使用方法

### 1. 命令行模式(推荐)

bash

python avatar_style_transfer.py --input ./真人照片.jpg --style Q版 --eye-scale 1.5 --mouth-scale 0.8

### 2. 参数说明

| 参数 | 必填 | 说明 | 示例值 |

|--------------|------|---------------------------------------|--------------|

| `--input` | 是 | 真人照片路径(支持JPG/PNG) | ./photo.jpg |

| `--style` | 是 | 目标风格(Q版/写实/复古) | Q版 |

| `--eye-scale`| 否 | 眼睛缩放倍数(默认1.0,Q版建议1.5) | 1.5 |

| `--mouth-scale`| 否 | 嘴巴缩放倍数(默认1.0,Q版建议0.8) | 0.8 |

## 示例输出

输入:`--input ./selfie.png --style 复古`

输出:

✨ 风格迁移完成!文件已保存至:

📁 手绘头像输出/selfie_复古.png

## 扩展说明

1. **新增风格**:在`load_style_config()`中添加新风格键值对(如"赛博朋克"),定义其色彩/线条/五官参数

2. **精细五官调整**:集成`dlib`库实现人脸关键点检测,替换`adjust_facial_features()`中的简化逻辑

3. **批量处理**:添加`--batch`参数支持文件夹内多图批量转换

## 注意事项

- 输入照片建议正面清晰照,五官位置居中效果更佳

- 复古风格自动添加棕褐色调与颗粒感,Q版风格默认放大眼睛缩小嘴巴

- 输出目录自动创建为"手绘头像输出",重复运行覆盖同名文件

## 许可证

MIT License

三、使用说明

1. 环境准备:

- 安装Python 3.8+,执行

"pip install pillow"安装依赖

2. 运行工具:

- 命令行传参:

"python avatar_style_transfer.py --input 你的照片路径 --style 风格"(如

"python avatar_style_transfer.py --input ./me.jpg --style Q版")

- 微调五官:添加

"--eye-scale 1.5"(放大眼睛)、

"--mouth-scale 0.8"(缩小嘴巴)参数

3. 查看结果:当前目录下"手绘头像输出"文件夹含高清PNG头像

四、核心知识点卡片

- PIL图像处理:用

"ImageEnhance"调色彩、

"filter"加模糊/边缘检测、

"blend"叠加强化效果

- 风格参数化配置:通过字典定义不同风格的色彩/线条/五官参数,实现灵活切换

- 模块化流程设计:拆分加载配置、图像读取、风格处理、五官微调、导出为独立函数

- 命令行参数解析:

"argparse"支持必填项(输入/风格)与可选项(五官微调)

- 简化版五官调整:通过区域缩放模拟眼嘴变化(进阶可集成人脸关键点检测库)

- 高清导出:

"save(dpi=(300,300))"确保印刷级清晰度,

"quality=95"优化压缩

- 异常处理机制:

"try-except"捕获图像读取/处理错误,返回友好提示

- 复古滤镜原理:通过RGB通道加权叠加实现棕褐色调,模拟胶片质感

关注我,有更多实用程序等着你!

http://www.jsqmd.com/news/147963/

相关文章:

  • 医院药房信息管理系统开题报告
  • 概念漂移应对:TensorFlow在线学习策略
  • 【Open-AutoGLM实战指南】:手机+电脑双端部署全攻略,手把手教你搭建AI推理环境
  • 5分钟快速上手:llm-client终极入门宝典
  • 非功能性指标
  • 全面讲解树莓派UART通信中的奇偶校验实现方法
  • 影视剧本生成:TensorFlow创意写作助手
  • 天文图像处理:TensorFlow星体识别系统
  • PHP-CS-Fixer 自定义修复器开发终极指南:从零构建你的专属代码格式化工具
  • 企业采购节:团购模式解锁更低单价
  • 2025最新!专科生必备9个AI论文工具,开题报告轻松搞定
  • Multisim14电阻分压电路仿真实践项目应用
  • 森林火灾预警:TensorFlow热力图分析
  • WinHex数据恢复终极指南:从零基础到精通完整教程
  • 模型版本控制:TensorFlow Model Registry方案
  • Linux系统CH340 USB Serial驱动加载实战案例
  • Coil WebP优化:Android图片加载性能提升全攻略
  • Segment Anything完整指南:零基础掌握AI图像分割技术
  • 医院参考文献
  • AR增强现实:TensorFlow SLAM融合方案
  • 盲文生成器:TensorFlow视觉到触觉映射
  • 【大模型开发者速进】:智谱Open-AutoGLM官方地址获取与Mac环境配置避坑指南
  • 深度解析32位dnSpy反编译工具:从入门到精通实战指南
  • MDAIOD 绘图​字体
  • 嵌入式AI开发:TensorFlow与Arduino结合
  • L298N电机驱动原理图优化技巧:适用于Arduino项目
  • Tinypool:轻量级Node.js线程池解决方案
  • 2025—2026年贵州高三补习/初三补习/高三文化课补习/补习辅导机构TOP 榜:聚焦定制化辅导与提分方案 - 海棠依旧大
  • 仅需3步完成AI建模?,Open-AutoGLM隐藏功能首次完整披露
  • 语言濒危保护:TensorFlow少数民族语音识别