2013-09-12 3 views
0

Я работаю над преобразованием цветного изображения в черно-белое изображение. Я использую BufferedImage для этого с типом TYPE_BYTE_BINARY. Но выходное изображение не преобразуется правильно. Например, если изображение содержит синие буквы на черном фоне, результат изображения для этой части является суммарно черным. Кто-нибудь может мне помочь? Мой код ниже.Преобразование цветного изображения в обратное/белое изображение

//Invert the colormodel 
byte[] map = new byte[] { (byte) (255), (byte) (0) }; 
IndexColorModel colorModel = new IndexColorModel(1, 2, map, 
map, map); 

BufferedImage bufferedImage = new BufferedImage(
img.getWidth(null), img.getHeight(null), 
BufferedImage.TYPE_BYTE_BINARY, colorModel); 
Graphics2D g2 = bufferedImage.createGraphics(); 
g2.drawImage(img, 0, 0, null); 
g2.dispose(); 
+1

Проверить [* этот пример *] (http://stackoverflow.com/questions/14513542/convert-image-to-black-white/14513703#14513703) – MadProgrammer

+0

@MadProgrammer Я разместил ответ ниже, но я понимаю, что большинство Это хорошо отражено в вашей ссылке. – haraldK

+1

Сглаживание до битональных будет плохой идеей для факсов, потому что это увеличит размер сжатых данных. То, что вы, вероятно, хотите использовать, - это динамический алгоритм порога, который может обрабатывать тонкие цветовые различия и создавать хорошо выглядящие изображения. – BitBank

ответ

1
BufferedImage bufferedImage= new BufferedImage(img.getWidth(null), img.getHeight(null); 
    ColorConvertOp op = 
     new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null); 
    op.filter(bufferedImage, bufferedImage); 

проверка этого link

+0

Моя цель - преобразовать нормальное изображение в tiff-изображение. Этот формат tiff используется для отправки по факсу. По этой причине я использую группу сжатия 4 при создании файла tiff из BufferedImage. Если вы не используете BufferedImage.TYPE_BYTE_BINARY, тогда я получаю следующую ошибку , Исключение в теме "main" java.lang.Error: Bilevel encodings поддерживаются только для двууровневых изображений. Когда я его использую, тогда создается файл tiff, но некоторые темные цвета перекрываются. Мой общий код ниже. – user2761226

2

Синий имеет очень низкую интенсивность, так синий (как RGB (0, 0, 255)) оказываясь черного при преобразовании в ч/б с порогом 50% следует ожидать. Попробуйте осветлить исходное изображение перед преобразованием в ч/б, чтобы увеличить часть изображения, выходящего белым.

Вы можете использовать RescaleOp для повышения яркости изображения до преобразования, или передать экземпляр вместе с изображением на drawImage метод, который принимает в качестве параметра BufferedImageOp. Обратите внимание, что вы можете масштабировать значения R, G и B независимо.

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