【问题标题】:Histogram computation in javajava中的直方图计算
【发布时间】:2011-12-26 16:41:34
【问题描述】:

我尝试创建一个计算图像直方图的程序。我有上面的代码,但我不知道为什么它不起作用。

    public void hist(List<Integer> r, List g, List b){

    int count[] = new int [256];

    int rSize = r.size();
    int gSize = g.size();
    int bSize = b.size();


    for (int j = 0; j<=255; j++){

        for(int i = 0; i < rSize; i++){

        if( r.get(i) ==  j ){}

            //System.out.println(r.get(i) ==  j);

            count[j]++;

        }
    }

    for (int i = 0; i < count.length; i++) {

        System.out.print(count[i]);

    }
}

如果我在 main 中调用它,count 的每个元素都是 rSize,这是不可能的,因为 r list 具有图像的红色通道的值。

【问题讨论】:

    标签: java image histogram


    【解决方案1】:

    您的if 为空:if( r.get(i) == j ){}

    应该是:

    if( r.get(i) ==  j )
    {
        count[j]++;
    }
    

    下次可能想使用调试器并简单地单步执行您的代码,会很容易抓住这一点。

    【讨论】:

    • 大声笑。真可惜。真的很抱歉。
    【解决方案2】:

    在前面的答案中添加您的 if 为空(IDE 中的自动格式化会显示您的缩进不正确)。

    但是,不需要嵌套循环。如果 r 可以有任何 Integer 或 null,那么你可以有:

    for (Integer integer: r){
        if (integer != null) {
            int i = integer;
            if(i >= 0 && i<= 255) {
                count[i]++;
            }
        }
    }
    

    并假设 r 仅包含适合 count 的整数,那么您可以拥有

    for (int i: r){
        count[i]++;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2014-04-05
      • 2013-10-09
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 2014-09-20
      相关资源
      最近更新 更多