Compare 2 fichier bmp => detection de pixel

Signaler
Messages postés
13
Date d'inscription
dimanche 6 janvier 2002
Statut
Membre
Dernière intervention
28 septembre 2003
-
Messages postés
2
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
9 mars 2003
-
bonjour je cherche comment comparer 2 bmp pour faire de la
detection de pixel ,mais je n'y arrive pas !!!
Si vous pouviez me donner des infos ou un source sur
lequel je peux me base ca m'avancerais beaucoup .Merci d'avance

5 réponses

Messages postés
95
Date d'inscription
mercredi 5 décembre 2001
Statut
Membre
Dernière intervention
27 juin 2006

tu veux faire quoi ?
que ton programme compare 2 fichier et t'indique les positions des pixels qui different ?
tu veux utiliser les gdi ou le faire directement en lisant les fichiers ?
soit plus precis, indique ce que tu veut qu'indique le resultat de la comparaison des 2 bmp
Messages postés
13
Date d'inscription
dimanche 6 janvier 2002
Statut
Membre
Dernière intervention
28 septembre 2003

tu veux faire quoi ?
que ton programme compare 2 fichier et t'indique les positions des pixels qui different ?

Oui ca m'aiderai bien ,ca ne serais qu'un debut mais ca serais tres bien

tu veux utiliser les gdi ou le faire directement en lisant les fichiers ?

je veux lire directement les fichiers ,c pour un prog de surveillance video

soit plus precis, indique ce que tu veut qu'indique le resultat de la comparaison des 2 bmp

en bref si le prog pouvais m'indique le nombre de pixel different et leur position ca serais le top

Merci d'avance
Mavric
Messages postés
95
Date d'inscription
mercredi 5 décembre 2001
Statut
Membre
Dernière intervention
27 juin 2006

bon je fait le prog cet nuit et je met ce que j'ai fait ici, demain soir
Messages postés
95
Date d'inscription
mercredi 5 décembre 2001
Statut
Membre
Dernière intervention
27 juin 2006

bon c moche mis j'ai pas le temp de faire mieux en ce moment desolé !

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>

struct RVB{
unsigned char Rouge;
unsigned char Vert;
unsigned char Bleu;
};

struct Position{
unsigned x;
unsigned y;
};

bool ComparePixel(RVB rvb1,RVB rvb2);
bool CompareImg(Position *Pos,int &TaillePos,int largeur,int hauteur, unsigned char *img1, unsigned char *img2);
bool PrendreTaille(int &largeur,int &hauteur,unsigned char *img);
bool PrendrePixel(int x,int y,int largeur,int hauteur,RVB &Couleur,unsigned char *img);
int TailleLigne(int largeur);

void main(){
FILE *Fichier;
unsigned char *Contenu,*Contenu2;
int Taille,largeur,hauteur;
RVB Couleur;
Position *Pos;
int TaillePos;
if((Fichier fopen("test.bmp","rb")) NULL) return;
fseek(Fichier,0,SEEK_END);
Taille = ftell(Fichier);
fseek(Fichier,0,SEEK_SET);
Contenu = (unsigned char*) malloc(Taille);
fread(Contenu,1,Taille,Fichier);
fclose(Fichier);
if((Fichier fopen("test2.bmp","rb")) NULL){
free(Contenu);
return;
}
fseek(Fichier,0,SEEK_END);
Taille = ftell(Fichier);
fseek(Fichier,0,SEEK_SET);
Contenu2 = (unsigned char*) malloc(Taille);
fread(Contenu2,1,Taille,Fichier);
fclose(Fichier);
Pos = (Position *) malloc(sizeof(Position)*Taille);

if(memcmp(Contenu,Contenu2,0x36)!=0){
printf("Entete de fichier different comparaison impossible\n");
free(Pos);
free(Contenu);
free(Contenu2);
return;
}

PrendreTaille(largeur,hauteur,Contenu);

if(!CompareImg(Pos,TaillePos,largeur,hauteur,Contenu,Contenu2)){
printf("Probleme ...\n");
free(Pos);
free(Contenu);
free(Contenu2);
return;
}
if(TaillePos == 0){
printf("Image Identique\n");
}else{
printf("Image Differentes\n");
}

free(Pos);
free(Contenu);
free(Contenu2);
}

bool CompareImg(Position *Pos,int &TaillePos,int largeur,int hauteur, unsigned char *img1, unsigned char *img2){
TaillePos = 0;
int x,y;
RVB rvb1,rvb2;

for(y=0;y<hauteur;y++){
for(x=0;x<hauteur;x++){
if(!PrendrePixel(x,y,largeur,hauteur,rvb1,img1)) return false;
if(!PrendrePixel(x,y,largeur,hauteur,rvb2,img2)) return false;
if(!ComparePixel(rvb1,rvb2)){
Pos[TaillePos].x = x;
Pos[TaillePos].y = y;
TaillePos++;
}
}
}
return true;
}

bool ComparePixel(RVB rvb1,RVB rvb2){
if(rvb1.Rouge != rvb2.Rouge) return false;
if(rvb1.Vert != rvb2.Vert) return false;
if(rvb1.Bleu != rvb2.Bleu) return false;
return true;
}

bool PrendreTaille(int &largeur,int &hauteur,unsigned char *img){
memcpy(&largeur,img+0x12,4);
memcpy(&hauteur,img+0x16,4);
return true;
}

bool PrendrePixel(int x,int y,int largeur,int hauteur,RVB &Couleur,unsigned char *img){
int tmp;
if((x<0)||(y<0)||(x>largeur)||(y>hauteur)) return false;
tmp = ((hauteur-1)-y)*TailleLigne(largeur);
tmp += 3*x;
Couleur.Bleu = img[tmp+0x36];
Couleur.Vert = img[tmp+0x37];
Couleur.Rouge = img[tmp+0x38];
return true;
}

int TailleLigne(int largeur){
int tmp;
tmp = largeur*3;
if((tmp%2)==1) tmp++;
return tmp;
}
Messages postés
2
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
9 mars 2003

bonjour

dis moi le source que tu recherchais devait calculer le nombre de pixel utilisé??
qu'il renvoyait le nombre de pixel utilisé??

j'ai un projet c jour ci et je dois calculer le nombre de pixel
utilisé
en comparant deux images
si t'as des sources aides moi merci

mon adresse est voodoudic@caramail.com
voodoudic@hotmail.com