Comparateur d'image

Signaler
Messages postés
10
Date d'inscription
vendredi 17 novembre 2000
Statut
Membre
Dernière intervention
6 mai 2006
-
Messages postés
192
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
30 janvier 2008
-
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

Messages postés
10
Date d'inscription
vendredi 17 novembre 2000
Statut
Membre
Dernière intervention
6 mai 2006

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
Messages postés
10
Date d'inscription
vendredi 17 novembre 2000
Statut
Membre
Dernière intervention
6 mai 2006

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)
Messages postés
192
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
30 janvier 2008

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>