Aus irgendeinem Grund funktioniert der folgende Code nicht. Ich habe zwei 640 * 480 Bilder, die sehr ähnlich, aber nicht gleich sind (mindestens einige hundert/tausend Pixel sollten unterschiedlich sein).OpenCV zwei Bilder vergleichen und verschiedene Pixel erhalten
Dies ist, wie ich sie am Vergleichs- und verschiedene Pixel zu zählen:
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++;
}
}
}
}
Jetzt am Ende ich Nummer 3626, die in Ordnung scheinen würden.
Aber ich habe versucht, eines der Bilder in MS Paint zu öffnen und dicke rote Linien darauf zu zeichnen, was die Anzahl der verschiedenen Pixel wesentlich erhöhen sollte. Ich habe wieder die gleiche Nummer: 3626.
Offensichtlich mache ich hier etwas falsch.
Ich vergleiche diese Bilder in einer Schleife.
Diese Linie ist vor der Schleife:
IplImage* lastFIplImageHeader = cvCreateImageHeader(cvSize(640, 480), 8, 3);
dann innerhalb der Schleife geladen werden I-Bilder wie folgt aus:
IplImage* fIplImageHeader = cvLoadImage(filePath.c_str());
// here I compare the pixels (the first code snippet)
lastFIplImageHeader->imageData = fIplImageHeader->imageData;
So lastFIplImageHeader wird das Bild von der vorherigen Iteration speichert und fIplImageHeader speichert die aktuelles Bild.
Sie haben wahrscheinlich Recht. Aber ich bekomme immer die gleiche Nummer: 3626.Ich denke, es gibt ein Problem mit dem Speichern des vorherigen Bildes in lastFIplImageHeader. –
Ich habe meine Antwort bearbeitet. – Darcara
Ich werde es am Abend versuchen und Sie wissen lassen, wie es gelaufen ist. Ich habe momentan nicht viel Zeit (ich bin in der Arbeit). –