Я создаю приложение, которое использует OCR для чтения текста с изображения (используя Tess4J для Tesseract Google), но я хочу проигнорировать текст с оттенком и только прочитать серый.Обнаружить и удалить ряд цветов из Java BufferedImage
На изображении ниже, например, я хочу только прочитать «Ricki» и игнорировать «AOA». http://i.imgur.com/daCuTbB.png
Для этого я решил удалить цвет загара с изображения, прежде чем выполнять OCR - мой лучший вариант.
/* Remove RGB Value for Group Tag */
int width = image.getWidth();
int height = image.getHeight();
int[] pixels = new int[width * height];
image.getRGB(0, 0, width, height, pixels, 0, width);
for (int i = 0; i < pixels.length; i++) {
//If pixel is between dark-tan value and light-tan value
if (pixels[i] > 0xFF57513b && pixels[i] < 0xFF6b6145) {
// Set pixel to black
System.out.println("pixel found");
pixels[i] = 0xFF000000;
}
}
image.setRGB(0, 0, width, height, pixels, 0, width);
Но этот код также удаляет почти весь серый текст. Вы не можете просто сравнить шестнадцатеричные значения цвета для диапазона значений, как у меня. Есть ли другой способ приблизиться к обнаружению целого ряда цветов? Или лучше другой подход к этой проблеме?
Почему вы не разбиваете его на отдельные компоненты? – gpasch
Еще лучше, преобразовать значения RGB в HSV и сравнить на основе компонента Hue. – haraldK
@ gpasch по отдельным компонентам вы имеете в виду индивидуальные цвета? Проблема заключается в том, что для каждого пикселя в одном и том же имени пользователя существует тонна шестнадцатеричных значений RGB, и даже те, которые не являются равномерными по сравнению с другими 4-мя именами пользователей. –