You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python的PIL库中为图像应用颜色蒙版并保留光影效果?

用Pillow修改图像十字形颜色并保留立体效果

要实现保留阴影和立体效果的颜色替换,核心是基于原区域的明暗信息(亮度)来叠加目标颜色,而非直接替换单一RGB值。以下是具体实现步骤和代码:

步骤说明

  • 提取十字形的亮度蒙版:利用十字区域的亮度差异生成渐变蒙版,完整保留原有的阴影、高光细节
  • 融合目标颜色:基于蒙版将红色与原图像的明暗信息结合,维持立体层次感
  • 输出最终图像:合并通道后导出修改后的图像

代码实现

from PIL import Image
import numpy as np

# 加载目标图像
img = Image.open("o6JU94A4.png").convert("RGBA")
img_np = np.array(img)

# 1. 生成十字区域的亮度渐变蒙版
# 计算像素亮度(RGB转灰度标准公式)
gray = 0.299 * img_np[...,0] + 0.587 * img_np[...,1] + 0.114 * img_np[...,2]
# 筛选十字区域并生成渐变蒙版(值越高,对应区域越接近十字核心)
mask = np.where(gray > 200, gray / 255, 0)  # 可根据实际图像调整阈值

# 2. 按蒙版权重混合原图像与红色,保留明暗细节
target_red = np.array([255, 0, 0], dtype=np.uint8)
img_np[...,:3] = (1 - mask[...,np.newaxis]) * img_np[...,:3] + mask[...,np.newaxis] * target_red

# 3. 转换回PIL图像并保存
result_img = Image.fromarray(img_np)
result_img.save("red_cross.png")

关键细节

  • 亮度蒙版:通过gray > 200筛选十字区域,gray/255保留渐变过渡,让阴影部分红色更淡、高光部分更鲜艳,完全维持原有立体效果
  • 加权混合:用(1-蒙版)*原图 + 蒙版*红色的方式混合,避免直接替换颜色导致的扁平感
  • 适配调整:如果十字不是纯白色,可修改亮度阈值(如gray > 180)或调整蒙版生成逻辑(比如基于特定颜色范围)

内容的提问来源于stack exchange,提问作者Kucherov Egor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 16:42:12