2011-11-06 3 views
1

Je suis en train de faire un programme pour détecter des couleurs au large d'un cube Rubiks EmguCV couleur Reconnaissance

thats la capture d'écran de ce que j'ai et en cours d'exécution à ce jour, je essentiellement utilisé le code de l'exemple de détection bord qui est livré avec emguCV et utilisé pour détecter les petits cubes (mais comme vous pouvez voir certains des petits cubes ne sont pas détectés, mais ce n'est pas le problème que je veux discuter ici).

Maintenant, après avoir découvert où les petits cubes sont, je veux détecter quelle couleur ils sont, actuellement j'utilise les valeurs HSV pour décider de la couleur, comme ceci:

if (current_colour.Hue > 120 && current_colour.Hue < 170) 
{ 
    Colours[(int)colornames.W]++; 
} 
else if (current_colour.Hue > (170)) 
{ 
    Colours[(int)colornames.R]++; 
} 
else if (current_colour.Hue > 5 && current_colour.Hue < 20) 
{ 
    Colours[(int)colornames.O]++; 
} 
else if (current_colour.Hue > 47 && current_colour.Hue< 60) 
{ 
    Colours[(int)colornames.G]++; 
} 
else if (current_colour.Hue > 15 && current_colour.Hue < 30) 
{ 
    Colours[(int)colornames.Y]++; 
} 
else if (current_colour.Hue > 100 && current_colour.Hue < 110) 
{ 
    Colours[(int)colornames.B]++; 
} 

où les valeurs chaque couleur que j'ai eu de tâtonnements à l'aide de photoshop ... Je suis sûr qu'il doit y avoir une meilleure façon d'obtenir des résultats qui sont mélangés (surtout avec le blanc et le rouge) Une aide?

+0

Salut, utilisez-vous toutes les données dans le carré pour produire une couleur moyenne ou juste un pixel individuel GetAverage produira la valeur moyenne pour une ROI. Pour obtenir de meilleurs résultats, utilisez la saturation et la valeur. Vous pouvez également utiliser un autre type d'image tel que Bgr pour confirmer les résultats d'autant plus que le blanc sera (255,255,255) et le rouge (0,0255) dans un monde idéal. Puis-je aussi dire que ce que vous faites semble vraiment intéressant. J'espère que je peux aider – Chris

+0

Hey Chris, j'utilisais un seul pixel, mais maintenant je pense à prendre la moyenne de plusieurs pixels (environ 9 ou 10) dans le carré (en écrivant ma propre fonction) est GetAverareage une fonction qui sera faites-le pour moi (je l'ai googlé mais je n'ai rien trouvé). – 7VoltCrayon

+0

Salut, oui, tout ce qu'il fait est de prendre le retour sur investissement, ajouter chaque pixel et diviser par le nombre de pixels afin d'écrire votre propre fonction est tout aussi facile. Je m'attends à ce qu'un seul pixel produise votre erreur principale car le noir affectera la couleur si elle est proche du bord grâce à l'encodage de l'image et à la compression sans faire de bruit. Je suggère de prendre le centre des places et travailler à partir de là. Salutations – Chris

Répondre

3

Si votre image est aussi simple que votre exemple, vous pouvez faire un histogramme sur l'image. Les pics dans votre histogramme correspondent aux couleurs que vous utilisez.

Donc, vous devez faire un histogramme ou trois, prenez les 10 valeurs les plus élevées (ou quelque chose d'autre) qui sont significativement assez éloignées les unes des autres, et là vous avez vos couleurs.