Вычисление гистограммы в Java - PullRequest
0 голосов
/ 26 декабря 2011

Я пытаюсь создать программу, которая вычисляет гистограмму изображения. У меня есть код выше, но я не могу понять, почему он не работает.

    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 имеет значения красного канала изображения.

Ответы [ 2 ]

4 голосов
/ 26 декабря 2011

Ваш if пуст: if( r.get(i) == j ){}.

Должно быть:

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

Возможно, в следующий раз захотите использовать отладчик и просто переберите свой код, это легко поймать.

1 голос
/ 26 декабря 2011

Чтобы добавить к предыдущим ответам, что ваше if пусто (автоматическое форматирование в вашей IDE покажет, что ваши отступы неверны).

Однако нет необходимости иметь вложенные циклы.Если r может иметь любое целое число или ноль, то вы можете иметь:

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

, и предполагая, что r содержит только целые числа, которые соответствуют количеству, тогда вы можете иметь

for (int i: r){
    count[i]++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...