Распечатка переполнения стека гистограммы

Я пытаюсь распечатать гистограмму значений, которые соответствуют количеству раз, когда значение пикселя появляется в файле .pgm. Я знаю, что правильно читаю значения, это когда я пытаюсь распечатать их там, где у меня есть проблемы.

int pixelHold[product];

for(long int i = 0; i < product; i++)
{
pixelHold[pixels[i]]++;
//cout << pixels[i] << ' ' << endl;

}
for(long int j = 0; j < product; j++)
{
cout << pixelHold[j] << ' ';

}

«product» — это значение пикселя Width x Height, которое соответствует размеру вектора, который я использую для хранения всех значений. «pixelHold» — это просто массив, который я использую для увеличения каждый раз, когда встречается значение пикселя. Например, если он встретил «222» 3 раза, он напечатал бы «3» для слота «222».

Однако проблема в том, что, когда я печатаю гистограмму, я получаю кучу нулей, а затем мусор для последних 100 слотов или около того. Когда я изменяю параметры цикла for на меньшее число, например «221», он выводит правильную гистограмму до этой точки.

Любая помощь высоко ценится!

0

Решение

Вам всегда нужно инициализировать ваши массивы — иначе они содержат абсолютно произвольное содержимое — содержимое ОЗУ, куда компилятор решил поместить ваш массив.

Кроме того, ваша таблица гистограмм должна иметь размеры 256 — так как это количество (8-битных) цветов в изображении в оттенках серого.

Следующий код должен сделать трюк:

const int histogramLevels = 256;
int pixelHold[histogramLevels];

for (int i=0; i<histogramLevels; i++) pixelHold[i] = 0;

for(long int i = 0; i < product; i++)
{
pixelHold[pixels[i]]++;
//cout << pixels[i] << ' ' << endl;

}

for (int i=0; i<histogramLevels; i++) {
cout << pixelHold[j] << ' ';
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]