Bonjour,
J'ai mis au point ma fonction getHue() qui va me permettre de faire un pas de géant dans ma détection de couleur ! En théorie, je vais pouvoir élminer une énorme partie ou la totalités des parasites une fois cette fonction implémenté dans ma classe detectionCouleur.as.
voici la fonction :
// give RGB value and return an hue -> integer function getHue ( red:int, green:int, blue:int):int{ var hueFinal:int; var tmpRed:Number = red/255; var tmpGreen:Number = green/255; var tmpBlue:Number = blue/255; var minValue:Number = Math.min(tmpRed, tmpGreen, tmpBlue); var maxValue:Number = Math.max(tmpRed, tmpGreen, tmpBlue); var deltaRGB:Number = maxValue - minValue; var hue:Number; var sat:Number; var lum:Number = (maxValue + minValue) /2 ; if(deltaRGB == 0){ hue = 0; sat = 0; }else { if(lum < 0.5){ sat = deltaRGB / ( lum*2); }else{ sat = deltaRGB / (2 - maxValue - minValue);} var deltaR:Number = (((maxValue - tmpRed) /6) + (deltaRGB / 2))/ deltaRGB; var deltaG:Number = (((maxValue - tmpGreen) /6) + (deltaRGB / 2))/ deltaRGB; var deltaB:Number = (((maxValue - tmpBlue) /6) + (deltaRGB / 2))/ deltaRGB; switch (maxValue){ case tmpRed : hue = deltaB - deltaG; break; case tmpGreen : hue = (1/3) + deltaR - deltaB ; break; case tmpBlue : hue = (2/3) + deltaG - deltaR; } if(hue < 0){ hue += 1;} if(hue > 1){ hue -= 1;} } hueFinal =Math.round(hue*360); return hueFinal ; }
Pour rappel, le hue indique la température de couleur en degrée. Cela change légèrement ma façon de traiter la detection. Si je donne la possibilité de pick une couleur sur l'apercu de la webcam, on peut imaginer utiliser n'importe quel objet et l'assigner à une fonction de la navigation. Tout cela est théorique, je vais faire des tests pour vérifier si la théorie == la pratique !
Denis P.