何らかの理由により、コードがうまく機能しません。私は非常によく似ていますが、同じではない2つの640 * 480の画像を持っています(少なくとも数百/千ピクセルは違うはずです)。OpenCVは2つの画像を比較し、異なるピクセルを取得します
これは私がそれらを比較し、異なる画素をカウントしています方法です:今
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++;
}
}
}
}
最後に、私は大丈夫と思われる数3626を取得します。
しかし、私はMSペイントで画像の1つを開こうとしましたが、濃い赤色の線が全体に広がっていました。私は再び同じ番号を持っています:3626.
明らかに私はここで何か間違っています。
これらの画像をループ内で比較しています。
この行はループの前にある:
IplImage* fIplImageHeader = cvLoadImage(filePath.c_str());
// here I compare the pixels (the first code snippet)
lastFIplImageHeader->imageData = fIplImageHeader->imageData;
のでlastFIplImageHeaderは前回の反復からの画像を記憶しているとfIplImageHeaderが保存されています
IplImage* lastFIplImageHeader = cvCreateImageHeader(cvSize(640, 480), 8, 3);
は、ループ内で私はこのような画像を読み込みます現在の画像。
あなたはおそらく正しいでしょう。しかし、私は常に同じ数字を得る:3626。lastFIplImageHeaderに以前のイメージを保存する方法にはいくつか問題があると思います。 –
私は私の答えを編集しました。 – Darcara
私は夕方に試して、それがどのように行ったかを知らせます。私は今(私は仕事中です)多くの時間がありません。 –