Bonjour,
J'ai pour projet dans le cadre d'un projet de groupe ( IUT ) de concevoir un TP d'informatique en C. Nous utiliserons openCV pour faire l'acquisition et le traitement d'image.
Le projet est la reconnaissance de forme simple, et la superposition d'un smiley sur celle-ci ( mini-réalité augmentée ). Le genre d'image à reconnaître est en pièce jointe.
Pour commencer, j'ai penser réaliser le programme en plusieurs étapes :
-étape 1 : acquisition de l'image : CvCapture *capture;
capture = cvCaptureFromCAM(0);
-étape 2 : réduction du bruit : idée, resizer l'image en divisant sa largeur et sa hauteur par 5, et en utilisant la moyenne des pixels supprimés.
IplImage *image1, *image2;
image1 = cvQueryFrame(capture);
void cvResize(const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR )
J'avoue ne pas être bien sur du mode de fonctionnement de cette fonction, que je n'arrive pas à faire fonctionner. Un peu d'aide serait bienvenue
-étape 3 : Seuillage : Mon idée serait de faire un seuillage pixel par pixel dans la nouvelle image en niveau de gris : Niveau 3 : vert>150 && vert>1,5*(rouge+bleu)
etc ...
Jusqu'au niveau 0 qui serait le niveau non-vert
-étape 4 : Filtrage : Créer une image en noir et blanc, en regardant les pixels voisins : si la somme du pixel et des 8 pixels voisins sont > à une certaine valeur en niveau de gris, alors le pixel correspondant dans la nouvelle image est blanc ( = vert ) sinon, il est noir.
Par exemple:
if (1.5*(niveau_gris_haut+niveau_ gris_coté+...)+4*niveau_gris_p ixel_central+(niveau_gris_coin s_haut_gauche+...)>18){
couleur.pixel=1; // les coins sont plus éloignés donc doivent avoir moins d'importance ...
}
else{
couleur.pixel=0;
}
- étape 5 : Faire des clusters des points blancs restant ( points "verts" après filtrage ). Je ne sais absolument pas comment utiliser la fonction.
- étape 6 : Faire une enveloppe convexe des clusters ( ce qui me semble le plus simple ).
- étape 7 : Utiliser convexity defect [ CvSeq* cvConvexityDefects(const CvArr* contour, const CvArr* convexhull, CvMemStorage* storage=NULL ) ]
Pour déterminer le haut de la forme ( pour donner un sens au smiley ). Et aussi déterminer si l'image est aberrante.
- étape 8 : mettre le smiley sur à l'endroit voulu, avec la rotation correspondante.
Je ne sais pas si j'ai été clair, n'hésitez pas à me demander plus de précision, et merci d'avance pour toute aide pouvant m'aider à avancer !
à+
-----