[英]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.