我正在使用 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”,底部有一个绿色像素。
在上面运行代码,我得到以下输出:
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
我不确定是什么原因造成的。它如何适用于第一行而不是第二行?是否存在某种不匹配,并将值取到它应该在左侧的一位?