Java: Как получить RGB-значения изображения? - PullRequest
0 голосов
/ 08 марта 2020

Я знаю, что существует довольно много подобных вопросов, но ни один из них, похоже, не решил мою проблему. Я хочу прочитать значения пикселей изображения и сохранить их в двойном массиве. Поскольку изображения только в оттенках серого, я преобразовал значения RGB в значение в оттенках серого. Я также изменил диапазон значений с 0-255 на 0-1.

Это мой код:

public static double[] getValues(String path) {
    BufferedImage image;
    try {
        image = ImageIO.read(new File(path));

        int width = image.getWidth();
        int height = image.getHeight();

        double[] values = new double[width * height];

        int index = 0;
        for(int x = 0; x < width; x++) {
            for(int y = 0; y < height; y++) {
                Color color = new Color(image.getRGB(y, x));
                int gray = (color.getRed() + color.getGreen() + color.getBlue()) / 3;
                values[index++] = gray / 255d;
            }
        }

        return values;
    } catch (IOException e) {
        e.printStackTrace();
    } 

    return null;
}

Однако, когда я использую это для преобразования черного изображения в двойные значения, я ожидайте только 0.0 как значения в массиве. Но то, что я получаю, выглядит примерно так: [0.058823529411764705, 0.058823529411764705, 0.058823529411764705, ...]

Можете ли вы сказать мне, что я делаю неправильно? Спасибо.

1 Ответ

0 голосов
/ 08 марта 2020

Изменить эту строку ...

int gray = (color.getRed() + color.getGreen() + color.getBlue()) / 3;

... на ...

int gray = color.getRed();

Пиксель в градациях серого имеет все свои цветные каналы, имеющие одинаковое значение. Вам не нужно делать никаких арифметических c операций там.


Глядя на остальную часть вашего кода, я не вижу никакой ошибки. Проблема, скорее всего, в том, что у вас есть черный цвет, а не черный. Черный - это RGB (0, 0, 0).


Умножение вашего результата на 255 дает мне около 15. Таким образом, цвет RGB равен (15, 15, 15), что составляет #0F0F0F. Это довольно темно, но не путайте его с настоящим черным, который #000000.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...