2015-09-27 2 views
4

Я пытаюсь получить значение RGB из изображения в градациях серого, и это было неверно (?) Значение RGB. Вот код.Странное значение RGB из java BufferedImage getRGB()

Color color = new Color(image.getRGB(0, 0)); 
System.out.print(color.getRed()); 
System.out.print(color.getGreen()); 
System.out.print(color.getBlue()); 

В цветовой палитре использовали, первый пиксель значение RGB R:153,G:153,B:153, но мой код печать

203203203 

Почему это дело случилось? И также, я пытаюсь использовать значения MATLAB Grayscale для точного пикселя, также является 153. Я делаю это неправильно?

это образ

enter image description here

+0

@FastSnail вот мой черно-белое изображение https://drive.google.com/file/d/0BzWz7hgjG3VEUmhZdWlCYmdVQVk/view?usp=sharing –

ответ

5

Это потому, что image.getRGB(x, y) по определению возвращает ARGB значения в SRGB с olorspace.

Из JavaDoc:

Возвращает целое число пикселей в RGB цветовой модели по умолчанию (TYPE_INT_ARGB) и по умолчанию SRGB цветовом. Преобразование цвета происходит, если эта модель по умолчанию не соответствует изображению ColorModel.

Matlab и другие инструменты, вероятно, используют линейное RGB или серое цветовое пространство, поэтому значения разные.

Вы можете получить те же значения из Java, если изображение является серой шкалой (TYPE_BYTE_GRAY), путем доступа к Raster и его методу getDataElements.

Object pixel = raster.getDataElements(0, 0, null); // x, y, data array (initialized if null) 

Если изображение TYPE_BYTE_GRAY, pixel будет byte массив с одним элементом.

int grayValue = ((byte[]) pixel)[0] & 0xff; 

Это значение будет 153 в вашем случае.

2

Просто попробуйте

System.out.println(image.getRaster().getSample(0, 0, 0)); //R 
System.out.println(image.getRaster().getSample(0, 0, 1)); //G 
System.out.println(image.getRaster().getSample(0, 0, 2)); //B 

Здесь

getSample(int x, int y, int b)
Возвращает образца в заданном диапазоне для пиксела, расположенного в точке (х, у) в качестве междунар. [В соответствии с this]

Параметры:
х - Х координата местоположения пикселя
у - Y-координата местоположения пикселя
б - группа для возврата
B = [0,1, 2] для [R, G, B]

, а также взглянуть на BufferedImage getRGB vs Raster getSample

+1

Я видел редактирования предлагают добавить импорт java.awt.image.WritableRaster. getRaster() является общедоступным методом в классе BufferedImage, который возвращает объект WritableRaster. Почему вы предложили редактирование? Можете ли вы объяснить немного больше? @HawasKaPujaari – sifho

Смежные вопросы