Trouver le centre du cercle

Résolu
stanlenoan Messages postés 1 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 16 février 2006 - 16 févr. 2006 à 15:58
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 17 févr. 2006 à 09:47
Bonjour à tous,

Je travaille sur un programme de traitement d'images venant d'une webcam, à partir de la bibliothèque openCV.
Pour le moment je veux suivre le mouvement d'une balle de ping pong sur un fond noir. Après traitement j'obtient un contour de la bille sans bruit ailleur sur l'image.
Mon problème est de trouver le centre de ce pseudo cercle pour le tracer, et suivre le centre de la ball.
J'ai pensé à plusieurs solution telle que moyenner les abscisses d'une part et les ordonnées d'autre part de tous les points du contours pour trouver le centre; mais mon codes bien que compilé sans erreur n'aboutit à rien si ce n'est un cercle en plein milieu de l'écran, et je perds l'image instantané...

Voilà mon morceau de code, pourriez vous me dire ce qui cloche???
planes[1] est une image IplImage

CvPoint* tab;
tab = (CvPoint*)malloc( 320*240*sizeof(CvPoint) );
int s=0;


//Algo pour trouver tous les points non noir.
for(i=0 ; i<240 ; i++)
{
for (j=0 ; j<320 ; j++)
{ if (planes[1]->imageData[j+i*320]=255u)
{ tab[s]=cvPoint(j,i);
s=s+1;
}
else s=s;
}
}
//planes[1]->imageData[100+100*320]=255;


int xaverage, yaverage;
for (i=0 ; i<s ; i++)
{ xaverage=xaverage+tab[i].x;
yaverage=yaverage+tab[i].y;}
xaverage=xaverage/s;
yaverage=yaverage/s;

cvCircle( planes[1], cvPoint(xaverage,yaverage), 20, CV_RGB(0,255,0), 1 );

2 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
17 févr. 2006 à 09:47
Pourtant c'est aussi a ca que j'ai pensé, faire la moyenne des points.
Mais je suis désolé, ton code est illisible. Et je comprends pas
pourquoi tu calculs la moyenne en deux temps. Une seule boucle suffit.
3
BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
16 févr. 2006 à 17:37
Une autre approche (je n'ai pas testé): Etablir les coordonnées des diamètres horizontaux et verticaux.

Lors du parcours de ton image, quand tu "rentre" dans ton cercle, tu as les coordonnées du point d'entrée. Idem pour la sortie. Il suffit après de garder le Xmin, Xmax, Ymin et Ymax.

Ton centre se trouvera alors (approximativement) en (Xmax-Xmin)/2 et (Ymax-Ymin)/2

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
0