私はOpenCVを使用して画像を反復処理し、各ピクセルの色を見つけています。使用しているコードの一部を次に示します。
IplImage* img = cvLoadImage("c:\\test.png");
int pixels = img->height * img->width;
int channels = img->nChannels;
for (int i = 0; i < pixels*channels; i+= channels)
{
unsigned char red = img->imageData[i + 2];
unsigned char green = img->imageData[i + 1];
unsigned char blue = img->imageData[i];
outputRGBValues(red, green, blue);
if (red == REDCOLOUR && green == GREENCOLOUR && blue == BLUECOLOUR)
{
count++;
}
}
cvReleaseImage(&img);
実行すると、outputRGBValuesは負の値を出力します。ほとんどの場合、R、G、B = -1ですが、他の負の数と少数の正の数の場合もあります。初期化されていないメモリの内容、およびピクセルがメモリに適切に割り当てられていないことについて何か聞いたことがあります。しかし、私はそれを本当に理解しておらず、間違いなくそれを修正する方法を知りません。何が間違っているので、どうすれば修正できますか?
アップデート
fschmittの変更で(上記のように)コードを修正した後、私は少し近づきました。 これは私が使用している画像です。非常に見づらいですが、これは5 * 3'V'の黒いピクセルで、下部に1つの緑色のピクセルがあります。
その上でコードを実行すると、次の出力が得られます。
0 0 0
255 255 255
255 255 255
255 255 255
0 0 0
255 255 186
0 0 255
255 255 0
And it continues
最初の5行は問題なく、正確に本来あるべき姿です。これが画像の一番上の行です。次の行、6行目以降は間違っています。そのはず:
255 255 255
255 255 255
0 0 0
何が原因なのかわかりません。2番目ではなくトップラインでどのように機能しますか?ある種の不一致があり、その値は本来あるべき場所の1ビット左にありますか?