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

如何用颜色矩阵实现仅保留黄色、其余转为灰度?

实现仅保留黄色、其余转灰度的颜色处理方案

首先明确:单纯靠一个颜色矩阵没法实现条件判断式的保留黄色(因为矩阵是线性变换,只能对所有像素做相同的数学运算),但可以通过「灰度转换+黄色区域叠加」的两步方式实现,或者结合遮罩完成。

先分析你之前的问题

你用的矩阵:

{ 0.4,  0.4,  0.4,  0.0,  0.0 }
{ 0.4,  0.4,  0.4,  0.0,  0.0 }
{ 0.4,  0.4,  0.0,  0.0,  0.0 }
{ 0.0,  0.0,  0.0,  1.0,  0.0 }
{ 0.0,  0.0,  0.0,  0.0,  1.0 }

这个矩阵的作用是:

  • 新R值 = 原R0.4 + 原G0.4 + 原B*0.4
  • 新G值 = 原R0.4 + 原G0.4 + 原B*0.4
  • 新B值 = 原R0.4 + 原G0.4 + 原B*0
    相当于把所有颜色的R、G拉到相近的高值,B压低,自然会让大部分颜色偏黄;而原本的黄色(R=G高、B低)计算后R、G会变成(高+高+低)*0.4,反而接近灰度,所以效果完全相反。

正确的实现步骤

方法1:灰度转换+黄色遮罩叠加(最准确)

  1. 生成黄色遮罩:
    将图像转为HSV色彩空间,黄色的参考范围是:

    • 色相(H):30°60°(可根据需求调整,比如20°65°也能覆盖更多黄色系)
    • 饱和度(S):>0.3(过滤低饱和的偏灰黄色)
    • 明度(V):>0.4(过滤暗黄色)
      符合这个范围的像素标记为黄色区域,其余为非黄色区域。
  2. 将原图转为灰度:
    使用标准灰度转换矩阵:

    { 0.299, 0.587, 0.114, 0.0, 0.0 }
    { 0.299, 0.587, 0.114, 0.0, 0.0 }
    { 0.299, 0.587, 0.114, 0.0, 0.0 }
    { 0.0,   0.0,   0.0,   1.0, 0.0 }
    { 0.0,   0.0,   0.0,   0.0, 1.0 }
    

    这个矩阵是根据人眼对RGB的敏感度加权,得到标准灰度效果。

  3. 叠加黄色区域:
    将原图中黄色区域的像素,替换到灰度图的对应位置;或者用混合模式(比如「正常混合」,遮罩区域显示原图,其余显示灰度图)。

方法2:近似的颜色矩阵模拟(适合简单场景)

如果不想用遮罩,想尽量用矩阵实现近似效果,可以设计一个矩阵,让黄色的R、G保留更多,B被抑制,同时非黄色区域向灰度靠拢。比如:

{ 1.0,  0.0, -1.0, 0.0, 0.0 }
{ 0.0,  1.0, -1.0, 0.0, 0.0 }
{ 0.299,0.587,0.114,0.0,0.0 }
{ 0.0,  0.0,  0.0,  1.0, 0.0 }
{ 0.0,  0.0,  0.0,  0.0, 1.0 }

这个矩阵的作用:

  • 新R = 原R - 原B:黄色的B值低,所以R保留较多;非黄色如果B高,R会被压低
  • 新G = 原G - 原B:同理,黄色的G保留较多
  • 新B = 灰度值:所有像素的B通道统一为灰度值
    这样会让黄色区域的R、G突出,B偏灰,接近保留黄色的效果,但不如遮罩方法准确,适合颜色对比强烈的场景。

注意事项

  • 黄色的范围可以根据你的实际需求调整,比如亮黄色、暗黄色的阈值不同
  • 如果是在Photoshop、GIMP这类工具里,可以直接用「色相/饱和度」调整+蒙版,或者「可选颜色」来实现,比手动写矩阵更直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 23:12:41