我正在尝试打印出与像素值在.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”)时,它会打印出正确的直方图,直至该点。
非常感谢任何帮助!
答案 0 :(得分: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] << ' ';
}