Comparateur d'image

jopiou Messages postés 10 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 6 mai 2006 - 6 mai 2006 à 11:13
THEwarrior333 Messages postés 192 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 30 janvier 2008 - 11 mai 2006 à 00:21
Bonjour voilà j'ai un petit probleme (enfin petit n'est pas le mot je penses...)
Je dois creer un comparateur d'image pour pouvoir differentier deux images de types bmp et selon une marge d'erreur dire s'il y a une comparaison ou pas.

Je vais vous montrer mon morceau de code qui bien sur ne fonctionne pas...

CFile fichier,fichier2;
char *bufimg,*bufimg2;
int i=0,interror=0,j=0;
if(!fichier.Open("C:\\1.BMP",fichier.modeRead,0))MessageBox("souci",0,MB_OK);
else
{
i=fichier.GetLength();
SetDlgItemInt(IDC_EDIT2,i,1);//affiche dans une edit box
bufimg= new char[fichier.GetLength()];
MessageBox("ok",0,MB_OK);
fichier.Read(bufimg,sizeof(bufimg));
MessageBox("reussissage :p",0,MB_OK);
}

if(!fichier2.Open("C:\\2.BMP",fichier.modeRead,0))MessageBox("souci2",0,MB_OK);
else
{
bufimg2= new char[fichier2.GetLength()];
MessageBox("ok",0,MB_OK);
fichier2.Read(bufimg2,sizeof(bufimg2));

MessageBox("reussissage :p",0,MB_OK);

}


while(i>0)
{
interror+=abs(bufimg[i])-abs(bufimg2[i]);

i--;
}
if(interror>= 100) MessageBox("erreur",0,MB_OK);
else MessageBox("aucune erreur image",0,MB_OK);

SetDlgItemInt(IDC_EDIT1,interror,1);// affiche dans une editbox


delete[] bufimg;
delete[] bufimg2;
fichier.Close();
fichier2.Close();

Je sais je sais le code est moche mais c'est mon "brouillon" :)

Bon sinon voila comment je fais, je met les deux image BMP dans des buffer que je compares bit a bit, enfin je les soustrait pour recuperer dans une troisieme buffer la somme de la soustraction. Si ils sont egaux je recupere 0 normalement, le probleme est que je recupere0 meme si les images sont differentes.
J'ai du mal m'y prendre pour les comparer donc j'ai besoin de votre aide s'il vous plais, c'est pour mon projet bts donc bientot =_=.

Merci

3 réponses

jopiou Messages postés 10 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 6 mai 2006
6 mai 2006 à 11:32
aprés modification de mon code dans la boucle while

while(i>0)
{
interror+=abs(bufimg[i])-abs(bufimg2[i]);

i--;
}

j'obtiens ça

while(i>0)
{
if(bufimg[i]!=bufimg2[i]) interror+=1;
//interror+=abs(bufimg[i]-bufimg2[i]);

i--;
}

et ça m'as l'air de bien fonctionner ^^ (deja ça :p)
Par contre le probleme est que si il y a une faible variation de couleur cela sera compté comme erreur alors que j'aimerais eviter ça.

Comment faire svp
0
jopiou Messages postés 10 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 6 mai 2006
6 mai 2006 à 11:47
Bon bah a croire que je repond a mes propres question ...
(enfin si ça peut aider :p)

DONC remodification du while

while(i>0)
{
intimg=0;
//if(bufimg[i]!=bufimg2[i]) interror+=1;
intimg+=abs(bufimg[i]-bufimg2[i]);
if(intimg>=60) interror+=1;
i--;
}
le 60 represente une marge d'erreur (en test pour le moment donc pas super la valeur :p)
0
THEwarrior333 Messages postés 192 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 30 janvier 2008
11 mai 2006 à 00:21
Es-tu sûr deja que lorsque tu charge une image ds un buffer tu ne mets pas aussi l'entete du fichier ds le buffer? Car tu peux avoir 2 images identiques ac des entetes différents. Je suppose en effet que GetLength retourne la taille entiere du fichier, cad
l'image + l'entete.

<ENDL>< body></ENDL>
0
Rejoignez-nous