如何提取一张图像的色调并迁移应用到另一张图像上?
如何提取一张图像的色调并将其应用到另一张图像上?
需求说明
需要将艾什莉·本森(Ashley Benson)的人像调整为《蒙娜丽莎》的图像色彩风格,参考素材如下:

解决方案
可以根据使用场景选择以下两种方案,都能实现自然的色调迁移效果:
方案1:Photoshop 零代码快速匹配(适合普通用户,5分钟出效果)
PS自带的颜色匹配功能专门针对这类色调迁移需求,操作步骤如下:
- 在PS中同时打开两张素材,选中艾什莉的人像作为待调整图层
- 顶部菜单栏依次选择
图像 > 调整 > 匹配颜色 - 在弹出的设置面板中,「源」选择当前打开的PS文件,「图层」选择蒙娜丽莎参考图层
- 微调三个参数到自然效果即可:
- 明亮度:建议设置在80-110区间,避免人像过暗丢失面部细节
- 颜色强度:建议设置在60-90区间,避免油画的黄调过重导致肤色失真
- 渐隐:建议设置在10-30区间,适当保留人像本身的皮肤通透感
优化技巧:调整前可以先用选区工具框选蒙娜丽莎的皮肤区域单独做匹配,避开背景和深色衣物的暗部脏色,最终肤色会更自然。如果想要更贴近油画质感,可以给最终结果叠加10%-20%透明度的油画布纹理素材,再添加1%左右的单色杂色模拟画布颗粒感。
方案2:Python 代码自动化迁移(适合批量处理/自定义效果)
这个方案基于经典的Reinhard色彩迁移算法,在LAB色彩空间下匹配两张图的色彩均值和标准差,不会破坏原图的轮廓和结构细节,代码可直接运行:
- 先安装依赖库
pip install opencv-python numpy - 运行以下代码,注意替换文件路径为你本地的素材路径
import cv2 import numpy as np def image_stats(image): # 计算图像LAB通道的均值与标准差 (l_channel, a_channel, b_channel) = cv2.split(image) return ( l_channel.mean(), l_channel.std(), a_channel.mean(), a_channel.std(), b_channel.mean(), b_channel.std() ) def color_transfer(ref_img, target_img): # 转换到LAB色彩空间,分离亮度与色彩通道 ref = cv2.cvtColor(ref_img, cv2.COLOR_BGR2LAB).astype("float32") target = cv2.cvtColor(target_img, cv2.COLOR_BGR2LAB).astype("float32") # 获取两张图的通道统计值 lMeanRef, lStdRef, aMeanRef, aStdRef, bMeanRef, bStdRef = image_stats(ref) lMeanTar, lStdTar, aMeanTar, aStdTar, bMeanTar, bStdTar = image_stats(target) # 对目标图做色彩归一化,匹配参考图的色彩分布 l, a, b = cv2.split(target) l = (l - lMeanTar) * (lStdRef / lStdTar) + lMeanRef a = (a - aMeanTar) * (aStdRef / aStdTar) + aMeanRef b = (b - bMeanTar) * (bStdRef / bStdTar) + bMeanRef # 裁剪数值到合法色彩区间,转回BGR空间 l = np.clip(l, 0, 255) a = np.clip(a, 0, 255) b = np.clip(b, 0, 255) result = cv2.merge([l, a, b]).astype("uint8") return cv2.cvtColor(result, cv2.COLOR_LAB2BGR) # 读取素材:ref_img是色调参考图(蒙娜丽莎),target_img是待调整的人像图 ref_img = cv2.imread("mona_lisa.png") target_img = cv2.imread("ashley.png") match_result = color_transfer(ref_img, target_img) # 保存结果 cv2.imwrite("color_match_result.png", match_result)
注意:本地素材路径不要包含中文,否则会出现OpenCV读取图片失败的问题。如果想要调整色调浓度,可以修改代码中标准差缩放的比例,数值越低越接近原图色彩。
内容的提问来源于stack exchange,提问作者user19249111
相关产品推荐
相关产品推荐

