2013-03-06 1 views
0

Donc, je suis nouveau pour le traitement d'image, et je suis en train d'apprendre emgucv en ce moment .. ..Je veux suivre une balle avec une couleur spécifique- orange .. cependant .. .. ce que j'avais besoin était de seuil, isoler, ou binariser (je ne connais pas le bon terme) .. l'image pour conserver une image grise de blanc et noir. le blanc étant les couleurs orange et noir le non-orange .. (désolé si cela semble un peu stupide) .. il y a cependant beaucoup de considérations lors de la binarisation d'une image ... les ombres .. les nuances d'oranges ...Efficacité Rapide Extraction de Couleur Emgucv

Je suis confus quant à ce qui est la meilleure fonction à utiliser .. j'ai essayé la fonction inRange pour l'image ..

imgProcessed = imgOriginal.InRange (mincolor, Maxcolor); Cependant, je trouve ça lent .. et je ne peux pas vraiment binariser toute la balle .. (des oranges sombres aux oranges claires) .. plus je dois ajuster les valeurs chaque fois que les conditions d'éclairage changent .. sont Y at-il des moyens d'obtenir "tout" ou au moins "la plupart" des nuances d'orange? Désolé..newbie ici ... J'apprécierais toute aide.code n'est pas nécessaire .. merci!: D

il ya tellement de fonctions à utiliser .. HSV .. inrange .. cvthreshold..what sont la meilleure façon? va utiliser hsv plutôt que bgr être plus rapide?

Répondre

1

Je l'ai fait. J'ai abandonné les fonctions OpenCV et j'ai fait les maths à la main. Voici mon code:

 for (i = 0; i < rows; i = i + step) 
       { 
        for (j = 0; j < cols; j = j + step) 
        { 

         closestprimary = new Bgr(0, 0, 0); 
         currentcolor = ImageFrame[i, j]; 
         B = (int)currentcolor.Blue; 
         G = (int)currentcolor.Green; 
         R = (int)currentcolor.Red; 
         //hue = atan2(sqr(3) * (G - B), 2 * R - G - B) 
         hue = ((Math.Atan2(1.732050808 * (double)(G - B), (double)(2 * R - G - B)) * 57.295779513) + 360) % 360; ; 
         //find closest primary hue (60 degree) 
         if (hue >= 15 && hue < 50) { 
          closestprimary = new Bgr(0, 127, 255); } //orange - sorta had to eyeball this one /shrug 
         ImageFrame[i, j] = closestprimary;//set new color 
        } 
       } 

Espérons que vous pouvez voir comment la teinte orange se situe entre 15 et 50, et peut changer les numéros à tout ce que vous voulez obtenir la couleur que vous souhaitez.

http://johndyer.name/lab/colorpicker/ m'a aidé à décider des nuances. (regardez le nombre supérieur, par le 'H')