【问题标题】:Java: How to get RGB-values of an image?Java:如何获取图像的 RGB 值?
【发布时间】:2020-06-20 14:24:05
【问题描述】:

我知道有很多类似的问题,但似乎没有一个能解决我的问题。我想读取图像的像素值并将它们存储在双精度数组中。由于图像只有灰度,我将 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, ...]

你能告诉我我做错了什么吗?谢谢。

【问题讨论】:

    标签: java image colors rgb grayscale


    【解决方案1】:

    改变这一行...

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

    ...到...

    int gray = color.getRed();
    

    灰度像素的所有颜色通道都具有相同的值。你不需要在那里做任何算术运算。


    查看您的其余代码,我没有发现任何错误。问题很可能是您那里的 black 颜色不是黑色。黑色是(0, 0, 0)的RGB。


    将结果乘以 255 大约是 15。所以颜色是(15, 15, 15) 的 RGB,即#0F0F0F。这很黑,但不要把它误认为是真正的黑色 #000000

    【讨论】:

    • 你是对的......我正在使用这些图像来训练神经网络,所以为了测试它,我打开了我的图像编辑软件并绘制了一些数字。我没有注意到 2 种标准颜色不是它们的默认值黑色/白色,但黑色仍然是以前工作的非常深的灰色......谢谢,有时这是简单的事情:D
    猜你喜欢
    • 2011-12-10
    • 2010-09-13
    • 2021-08-10
    • 2014-11-29
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多