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

如何在Python中实现基于墨水量权重的颜色加权求和?

实现以墨水量权重为基准的颜色混合

问题原因

RGB是加色模式(基于光的叠加,数值越高颜色越亮,白色为(1,1,1),黑色为(0,0,0)),而墨水混合属于减色模式(基于颜料吸收光,墨水用量越少,反射的光越多,颜色越接近白色)。直接在RGB空间加权求和,本质是叠加少量光色,自然会得到接近黑色的结果。

解决方案

要实现墨水量权重的混合,需从白色(无墨水状态)出发,计算每种墨水对光的吸收量,最终RGB值为白色减去总吸收量:

  • 每个RGB通道的总吸收量 = 所有墨水的权重 × 该墨水对当前通道的吸收比例(吸收比例 = 1 - 该墨水在当前通道的RGB值)
  • 最终通道值 = 1 - 总吸收量

代码实现

import numpy as np
import matplotlib.colors as colors

palette = [(1,0,0),(0,1,0),(0,0,1)]
weight = (0.1,0.1,0.1)

# 转换为numpy数组简化计算
palette_np = np.array(palette)
weight_np = np.array(weight)

# 计算每个RGB通道的总吸收量
absorbed = np.sum(weight_np[:, np.newaxis] * (1 - palette_np), axis=0)
# 计算混合后的RGB颜色
mixed_colors = 1 - absorbed

print(colors.to_hex(mixed_colors))  # 输出 #cccccc,接近白色

补充说明

如果调色板包含非纯原色(比如(0.5,0,0)的浅红色墨水),上述逻辑依然适用:该墨水对G/B通道的吸收比例为1-0=1,对R通道的吸收比例为1-0.5=0.5,用量权重w时,会吸收w*0.5的R光、w*1的G/B光。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:55:25