0

我正在尝试打印出与像素值出现在 .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 次,它将为“222”插槽打印“3”。

但是,问题是,当我打印直方图时,我得到一堆零,然后在最后 100 个左右的插槽中出现垃圾。当我将 for 循环的参数更改为较小的数字时,例如“221”,它会打印出正确的直方图。

任何帮助深表感谢!

4

1 回答 1

1

你总是需要初始化你的数组 - 否则它们包含绝对任意的内容 - 编译器决定放置你的数组的 RAM 的内容。

此外,您的直方图应该具有 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] << ' ';
}
于 2013-09-19T20:20:52.527 回答