2010-05-05 146 views
1

基本上我想要兩種混合顏色color1color2。由於簡單的計算帶來了像藍色+黃色=灰色((color1.r + color2.r)/2等)的東西,我做了一些研究,發現混合顏色顯然混合顏色看起來像我們期望它(如藍色+黃色=綠色)isn'那挺直的。混合RGB顏色(L * a * b *)

什麼另一個stackoverflow帖子告訴我,爲了兩個正確的混合物,我必須使用L a b * space/CIELAB並鏈接到關於此主題的維基百科頁面。

我發現它翔實的,但我不能真正理解如何將RGB轉換爲(sRGB和比)長一個 B * - 如何搭配所獲得的顏色,以及如何轉換回

希望這裏有人可以幫我

感謝,

塞繆爾

+2

http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html – 2010-05-05 08:04:57

+0

謝謝!似乎只是我需要 - 立即挖掘它:) – Samuel 2010-05-05 09:06:29

回答

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)使所有的顏色轉換回來。

+0

羅斯,你可以請更具體的關於「混合coor渠道」?你的意思是隻做每個L * a * b *值的數學平均值?請澄清。 – 2012-06-30 13:38:45