Pour une raison quelconque, le code ci-dessous ne fonctionne pas. J'ai deux images 640 * 480 qui sont très similaires mais pas les mêmes (au moins quelques centaines/milliers de pixels devraient être différents).OpenCV compare deux images et obtient des pixels différents
Voici comment je les compare et en comptant différents pixels:
unsigned char* row;
unsigned char* row2;
int count = 0;
// this happens in a loop
// fIplImageHeader is current image
// lastFIplImageHeader is image from previous iteration
if (NULL != lastFIplImageHeader->imageData) {
for(int y = 0; y < fIplImageHeader->height; y++)
{
row = &CV_IMAGE_ELEM(fIplImageHeader, unsigned char, y, 0);
row2 = &CV_IMAGE_ELEM(lastFIplImageHeader, unsigned char, y, 0);
for(int x = 0; x < fIplImageHeader->width*fIplImageHeader->nChannels; x += fIplImageHeader->nChannels)
{
if(row[x] != row2[x] || row[x+1] != row2[x+1] || row[x+2] != row2[x+2])
count++;
}
}
}
}
Maintenant, à la fin je reçois le numéro 3626 qui semble bien. Mais, j'ai essayé d'ouvrir l'une des images dans MS Paint et de tracer des lignes rouges épaisses partout, ce qui devrait augmenter considérablement le nombre de pixels différents. J'ai encore le même numéro: 3626.
Évidemment, je fais quelque chose de mal ici.
Je compare ces images dans une boucle.
Cette ligne est avant que la boucle:
IplImage* lastFIplImageHeader = cvCreateImageHeader(cvSize(640, 480), 8, 3);
ensuite dans la boucle je charger des images comme celle-ci:
IplImage* fIplImageHeader = cvLoadImage(filePath.c_str());
// here I compare the pixels (the first code snippet)
lastFIplImageHeader->imageData = fIplImageHeader->imageData;
Ainsi lastFIplImageHeader stocke l'image de l'itération précédente et fIplImageHeader stocke la Image actuelle.
Vous avez probablement raison. Mais j'ai toujours le même numéro tout le temps: 3626.Je pense qu'il y a un problème avec la façon dont je stocke l'image précédente dans lastFIplImageHeader. –
J'ai édité ma réponse. – Darcara
Je vais essayer le soir et vous faire savoir comment ça s'est passé. Je n'ai pas beaucoup de temps en ce moment (je suis au travail). –