2010-05-05 4 views
1

Fondamentalement, je veux deux mélanger deux couleurs color1 et color2. Depuis des calculs simples, comme blue + yellow = grey ((color1.r + color2.r)/2 etc.) j'ai fait quelques recherches et j'ai trouvé que mélanger apparemment les couleurs pour que la couleur mélangée ressemble à ça aussi (par exemple blue + yellow = green) isn ' t que simple.Mélanger les couleurs RVB (L * a * b *)

Ce qu'un autre post de stackoverflow m'a enseigné était que pour que deux réalisent le mélange correctement je devrais employer le L un b * space/CIELAB et lié à la page de wikipedia sur ce sujet.

je l'ai trouvé instructif, mais je ne pouvais pas vraiment comprendre comment convertir RVB (sRVB et que de) L a b * - comment mélanger les couleurs et comment reconvertir

obtenues J'espère quelqu'un ici peut me aider

Merci,

Samuel

+2

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

+0

Merci !! semble juste ce dont j'avais besoin - creuser dans tout de suite :) – Samuel

Répondre

0

1) convertir en RGB sRGB. De 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 en CIELAB. Regardez dans la source OpenCV [/src/cv/cvcolor.cpp]. Il existe des fonctions pour les conversions d'espace colorimétrique [icvBGRx2Lab_32f_CnC3R]

3) mélanger les canaux de couleur.

4) de rétablir toutes les conversions de couleurs.

+0

Ross, pouvez-vous s'il vous plaît être plus précis sur "mix coor channels"? Voulez-vous dire faire juste les moyennes mathématiques de chaque L * a * b * valeurs? Précisez s'il vous plaît. –

Questions connexes