簡體   English   中英

Java:如何獲取圖像的 RGB 值?

[英]Java: How to get RGB-values of an image?

我知道那里有很多類似的問題,但似乎沒有一個能解決我的問題。 我想讀取圖像的像素值並將它們存儲在雙數組中。 由於圖像只有灰度,我將 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, ...]

你能告訴我我做錯了什么嗎? 謝謝你。

改變這一行...

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

... 到 ...

int gray = color.getRed();

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


查看您的其余代碼,我沒有發現任何錯誤。 問題很可能是您擁有的黑色不是黑色。 黑色是(0, 0, 0) RGB。


將你的結果乘以 255 得到大約 15。所以顏色是(15, 15, 15) RGB,即#0F0F0F 這很暗,但不要誤認為是#000000真正黑色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM