Я использую 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
Я не уверен, что вызвало это.Как это может работать для верхней строчки, а не для второй?Есть ли какое-то несоответствие, и оно принимает значение на один бит слева от того места, где оно должно быть?