java中的直方图计算

时间:2011-12-26 16:41:35

标签: java image histogram

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

    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具有图像的Red channel值。

2 个答案:

答案 0 :(得分:4)

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

应该是:

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

可能希望下次使用调试器,只需单步执行代码,就可以轻松捕获。

答案 1 :(得分:1)

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

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

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

并假设r只包含适合计数的整数,那么你可以拥有

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