Строго говоря, предполагая, что у вас есть доступ к пикселям изображения (вы можете найти в Интернете, как этого добиться на вашем языке программирования, поскольку тема доступна в изобилии), упражнение включает в себя один раз просмотр пикселей, чтобы определить «порог темноты». ». Для этого вы конвертируете каждый пиксель из RGB в HSL , чтобы получить компонент уровня lightness для каждого пикселя. Во время этого процесса вы рассчитываете среднюю яркость для всего изображения, которую вы можете использовать в качестве «порога темноты»
Получив средний уровень яркости изображения, вы можете еще раз пройтись по пикселям изображения, и если пиксель меньше порога темноты, установите его цвет на полный белый RGB (255 255 255), в противном случае установите его цвет на полный. черный RGB (0,0,0). Это даст вам двоичное изображение, в котором текст должен быть черным, а остальное должно быть белым.
Конечно, ключ в поиске подходящего порога темноты - поэтому, если усредненный метод не дает хороших результатов, вам, возможно, придется придумать другой метод, чтобы увеличить этот шаг. Такой метод может включать разделение изображения в основных каналах Red, Green, Blue и вычисление порога темноты для каждого канала в отдельности, а затем использование агрессивного порога из трех ..
И, наконец, лучшим подходом может быть вычисление распределения уровней освещенности, а не просто среднего значения, а затем исходя из этого, диапазон вокруг максимума - это то, что вы хотите сохранить. Опять же, пройдитесь по каждому пикселю и, если его яркость соответствует полосе, сделайте его черным, в противном случае сделайте его белым.
EDIT
Для дальнейшего прочтения о HSL я рекомендую начать с записи Wiky в цветовых пространствах HSL и HSV .