c++ - 打印直方图 C++

标签 c++ histogram

我正在尝试打印出与像素值在 .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] << ' ';

    }

“产品”是宽度 x 高度像素值,对应于我用来存储所有值的 vector 的大小。 “pixelHold”只是一个数组,每次遇到像素值时我都会使用它来递增。例如,如果它遇到 3 次“222”,它会为“222”槽打印一个“3”。

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

非常感谢任何帮助!

最佳答案

你总是需要初始化你的数组 - 否则它们包含绝对任意的内容 - 编译器决定放置你的数组的 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] << ' ';
}

关于c++ - 打印直方图 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18904056/

相关文章:

c++ - 分析崩溃的反汇编 C++ 代码

c++ - 斜齿轮结构 : Sweep Profile with Spin (twist)

r - R中大矩阵的直方图

c++ - CRTP - 我可以创建一个私有(private)方法吗?

c++ - 我必须找到通过 "race track"的多个检查点的最短路径。如何使用 BFS 管理检查点?

c# - 在 C++ 或 Java 应用程序中嵌入 Flash Player?

ruby - 如何在 Ruby 中从平面数组创建直方图

histogram - 带变换聚合的 Altair 直方图无法正确覆盖全局平均值

java - IsFlush boolean 值

python - 如何对 key :value pairs in a python dictionary based on certain range or interval? 进行分组