混合RGB颜色(L * a * b *)

时间:2010-05-05 07:42:10

标签: colors rgb mixing

基本上我想要两种颜色混合color1color2。 由于简单的计算带来了像蓝色+黄色=灰色((color1.r + color2.r)/2等)的东西,我做了一些研究,发现显然混合颜色,以使混合颜色看起来像我们期望的那样(例如蓝色+黄色=绿色)不是那么直接。

另一个stackoverflow帖子告诉我的是,为了使两个正确地实现混合,我必须使用L a b * space / CIELAB并链接到关于该主题的维基百科页面。 / p>

我发现它提供了信息,但我真的不明白如何将RGB转换为(sRGB而不是)L a b * - 如何混合获得的颜色以及如何转换回来

我希望有人可以帮助我

谢谢,

塞缪尔

1 个答案:

答案 0 :(得分:0)

1)将sRGB转换为RGB。来自GEGL:

  

static inline double
linear_to_gamma_2_2 (double value)
{
  if (value > 0.0030402477F)
    return 1.055F * pow (value, (1.0F/2.4F)) - 0.055F;
  return 12.92F * value;
}


static inline double
gamma_2_2_to_linear (double value)
{
  if (value > 0.03928F)
    return pow ((value + 0.055F) / 1.055F, 2.4F);
  return value / 12.92F;
}

2)RGB到CIELAB。查看OpenCV源代码[/src/cv/cvcolor.cpp]。有颜色空间转换功能[icvBGRx2Lab_32f_CnC3R]

3)混合颜色通道。

4)重新进行所有颜色转换。