Я бьюсь головой о стену около недели, потому что я не смог правильно получить доступ к значениям пикселей интегрального изображения. Я удалил предыдущее сообщение, так как это более конкретный пример моей проблемы.
Я точно определил точную проблему, то есть, по крайней мере, нашел какой-то метод безумия
В целях отладки я выводю не все пиксели, а только строки 5:
Код чистый и простой (но комментарии приветствуются)
int main(){
Mat src = imread("test.png");
imshow("SOURCE", src);
cvtColor(src, src, CV_BGR2GRAY);
GpuMat gpu_src, gpu_ii;
gpu_src.upload(src);
integral(gpu_src, gpu_ii);
Mat cpu_ii;
gpu_ii.download(cpu_ii);
imshow("Just for fun", cpu_ii);
for (int j = 0; j < 8; j++) {
for (int i = 0; i < 8; i++) {
//Center Value: Pixel value at (i,j)
int center_val = (int)cpu_ii.data[(i * cpu_ii.step) + (j * cpu_ii.elemSize())];
cout << center_val << endl;
}
cout << "next line" << endl;
}
}
Теперь в первом ряду печатается 0 0 0 ... идеально
Второй ряд: 160 64 224 128 32 192 96
Очевидно, что эти результаты неверны. Более конкретно:
Ожидаемые результаты для второго значения должны быть равны 320, что, кстати, составляет примерно 320-255.
Результаты ясно показывают, что значение начинается с 0, как только результат суммы превышает 255.
Как я могу устранить эту проблему?
С уважением,