2010-05-05 3 views
1

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

Что мне рассказали еще одна статья stackoverflow, так это то, что для того, чтобы двое достигли смеси правильно, мне пришлось бы использовать L a b * space/CIELAB и связанный со страницей wikipedia об этой теме.

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

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

Спасибо,

Самуила

+2

http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html –

+0

Спасибо! похоже, именно то, что мне нужно - сразу же вникать в него :) – Samuel

ответ

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 to CIELAB. Посмотрите в исходный код OpenCV [/src/cv/cvcolor.cpp]. Существуют функции для преобразования цветового пространства [icvBGRx2Lab_32f_CnC3R]

3) перемешать цветные каналы.

4) сделайте все преобразования цветов обратно.

+0

Росс, не могли бы вы уточнить, что такое «mix coor channels»? Вы хотите сделать только математические средние из значений L * a * b *? Просьба уточнить. –

Смежные вопросы