Смешайте цвета RGB (L * a * b *) - PullRequest
1 голос
/ 05 мая 2010

В основном я хочу два смешать два цвета color1 и color2. Так как простой расчет вызывает такие вещи, как синий + желтый = серый ((color1.r + color2.r)/2 и т. Д.), Я провел некоторое исследование и обнаружил, что, очевидно, смешивание цветов для того, чтобы смешанный цвет выглядел так, как мы ожидаем (например, синий + желтый = зеленый), не так просто.

То, чему меня научил другой пост в stackoverflow, заключается в том, что для того, чтобы два добились правильного сочетания, мне нужно было использовать пространство L a b * / CIELAB и ссылку на страницу википедии об этой теме. *

Я нашел это информативным, но я не мог понять, как конвертировать RGB в (sRGB и чем) L a b * - как смешать полученные цвета и как конвертировать обратно

Я надеюсь, что кто-то здесь может помочь мне

Спасибо

Samuel

1 Ответ

0 голосов
/ 09 мая 2010

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;
}
</code>
<code>
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) сделать все преобразования цветов обратно.

...