基本上我想要两种颜色混合color1
和color2
。
由于简单的计算带来了像蓝色+黄色=灰色((color1.r + color2.r)/2
等)的东西,我做了一些研究,发现显然混合颜色,以使混合颜色看起来像我们期望的那样(例如蓝色+黄色=绿色)不是那么直接。
另一个stackoverflow帖子告诉我的是,为了使两个正确地实现混合,我必须使用L a b * space / CIELAB并链接到关于该主题的维基百科页面。 / p>
我发现它提供了信息,但我真的不明白如何将RGB转换为(sRGB而不是)L a b * - 如何混合获得的颜色以及如何转换回来
我希望有人可以帮助我
谢谢,
塞缪尔
答案 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)重新进行所有颜色转换。