Я действительно новичок в opencv и новичок в python.
У меня есть это изображение:
Я хочукаким-то образом применить правильное пороговое значение, чтобы оставить только 6 цифр.
В целом я намерен попытаться выполнить ручное распознавание изображений для каждой цифры отдельно, используя алгоритм k-ближайших соседей для каждой цифрыlevel (kNearest.findNearest)
Проблема в том, что я не могу достаточно почистить цифры, особенно цифру '7', через которую проходит этот синий водяной знак.
Шаги Iдо сих пор пробовал следующее:
Я читаю изображение с диска
# IMREAD_UNCHANGED is -1
image = cv2.imread(sys.argv[1], cv2.IMREAD_UNCHANGED)
Тогда я оставляю только синий канал, чтобы избавиться от синего водяного знака вокруг цифры '7', эффективно преобразуя его в одноканальное изображение
image = image[:,:,0]
# openned with -1 which means as is,
# so the blue channel is the first in BGR
Затем я немного умножаю его, чтобы увеличить контраст между цифрами ифон:
image = cv2.multiply(image, 1.5)
Наконец я выполняю бинарный + отсечение порога:
_,thressed1 = cv2.threshold(image,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
Как вы видите конечный результатдовольно хорошо, за исключением цифры «7», которая сохранила много шума.
Как улучшить конечный результат?Пожалуйста, предоставьте пример изображения, если это возможно, лучше понять, чем просто фрагменты кода.