我正在使用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);
当我运行它时,输出RGBValues会输出负值。最常见的是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
前五行没有问题,正是应该的样子。这是图像的顶部行。接下来的一行,从第6行开始是错误的。应该是:
255 255 255
255 255 255
0 0 0
我不确定是什么原因导致这个问题。为什么第一行可以工作,而第二行却不能?是否存在某种不匹配,导致它取了比应该更左边一位的值?