1

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

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

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

我希望这里有人可以帮助我

谢谢,

塞缪尔

4

1 回答 1

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)使所有的颜色转换回来。

于 2010-05-09T16:14:51.690 回答