Как получить значение пикселя в изображении в градациях серого - PullRequest
5 голосов
/ 21 ноября 2011

У меня есть BufferedImage, который имеет TYPE_BYTE_GRAY, и мне нужно получить значение пикселя в x, y. Я знаю, что не могу использовать getRGB, поскольку он возвращает неправильную цветовую модель, так как мне это сделать? Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 21 ноября 2011

Получите java.awt.image.Raster из BufferedImage, вызвав метод getData().

Затем используйте

int getSample(int x, int y, int b)

на полученном объекте, где b - канал цвета (где каждый цвет представлен 8 битами)

Для оттенков серого

b = 0.

Для изображений RGB

b = 0 ==>> R channel,
b = 1 ==>> G channel,
b = 2 ==>> B channel.
1 голос
/ 21 ноября 2011

Полагаю, вам нужна математика, чтобы получить одно число для представления шкалы серого в этом RGB, есть несколько различий, следуйте некоторым из них:

В среднем метод легкостинаиболее заметные и наименее заметные цвета: (max (R, G, B) + min (R, G, B)) / 2.

Метод усреднения просто усредняет значения: (R + G + B) / 3.

Метод светимости является более сложной версией усредненного метода.Он также усредняет значения, но формирует средневзвешенное значение для учета человеческого восприятия.Мы более чувствительны к зеленому цвету, чем другие, поэтому зеленый вес имеет наибольшее значение.Формула для светимости составляет 0,21 R + 0,71 G + 0,07 B.

Ссылка: http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/

0 голосов
/ 11 августа 2015

При условии, что у вас есть BufferedImage с именем grayImg, тип которого TYPE_BYTE_GRAY

int width = grayImg.getWidth();

int height = grayImg.getHeight();

byte[] dstBuff = ((DataBufferByte) grayImg.getRaster().getDataBuffer()).getData();

Тогда значение серого в (x, y) будет просто:

dstBuff[x+y*width] & 0xFF;
...