У меня есть изображение, которое я готовлю для распознавания текста. Я использую opencv2 (который включает numpy). Я пытаюсь преобразовать «желтый» текст в черный, а все на заднем плане - в белый. Мой желтый текст представляет собой разное количество более темных и более светлых желтых пикселей, поэтому мне нужно сравнивать порог, а не одно значение RGB / BGR. Я видел несколько примеров в Интернете , показывающих, как изменить цвет c stati, но я не уверен, как применить это с помощью порога.
Вот образец изображения:
Образец текста
import cv2
image = cv2.imread("Text.png")
print(type(image)) # type is a <class 'numpy.ndarray'>
# Convert any existing black pixels to white.
image[np.where((image == [0, 0, 0]).all(axis=2))] = [255, 255, 255] # BGR format
# Convert any "yellow" pixels to black (any text)
image[np.where((image <= [0, 209, 255]).all(axis=2)) and (image >= [0, 56, 68]).all(axis=2)] = [0, 0, 0] # BGR format
# Convert any non black pixels to white (background pixels)
image[np.where((image > [0, 0, 0]).any(axis=2))] = [255, 255, 255] # BGR format
Этот код генерирует изображение ниже:
Конечный результат
Мы видим мой код почти работает, но на втором этапе все белые пиксели преобразуются в черные (обратите внимание на лишние черные пиксели под буквами). Этого не должно происходить (и могут быть другие проблемы ??).
Может кто-нибудь объяснить, где я ошибся и как я могу это исправить? Я новичок в массивах numpy и их синтаксисе, поэтому дополнительные детали мне очень помогут. Спасибо за ваше время.