Чтение символов из изображения — удаление кривой

#opencv #ocr #tesseract #python-tesseract #opencv-python

#opencv #ocr #тессеракт #python-тессеракт #opencv-python

Вопрос:

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

введите описание изображения здесь

 img = cv2.imread('screenshot.png', 0)
ret, thresh_img = cv2.threshold(img, 125, 255, cv2.THRESH_BINARY_INV)
cv2.imshow('grey image',thresh_img)
cv2.imwrite("result11.jpg", thresh_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
  

Я попытался преобразовать его в шкалу серого и удалить волновой шум. Я не могу этого сделать. Пожалуйста, помогите мне. Новичок в OpenCV.

Ответ №1:

Вы можете применить следующую последовательность:


1 — Адаптивный порог

2- Морфологическое преобразование

3- Побитовая операция

Шаг 1: адаптивный порог


  • Получите разные пороговые значения для разных областей одного и того же изображения для получения лучших результатов.

  • Результат:

    • введите описание изображения здесь

Шаг 2: морфологическое преобразование


  • Мы применим:

    • эрозия с последующим расширением (открытием)

    • расширение с последующей эрозией (закрытие)

    • Результат:

      • введите описание изображения здесь

Шаг 3: побитовая операция

  • Полезно для извлечения части изображения

  • Результат:

    • введите описание изображения здесь

Теперь, если мы прочитаем с изображения, результат будет:

 dbdhm
  

Код:


 import cv2
import numpy as np
import pytesseract

img = cv2.imread("UzhPS.png")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
flt = cv2.adaptiveThreshold(gry,
                            100, cv2.ADAPTIVE_THRESH_MEAN_C,
                            cv2.THRESH_BINARY, 13, 16)
krn = np.ones((3, 3), np.uint8)
opn = cv2.morphologyEx(flt, cv2.MORPH_OPEN, krn)
cls = cv2.morphologyEx(opn, cv2.MORPH_CLOSE, krn)
gry = cv2.bitwise_or(gry, cls)
txt = pytesseract.image_to_string(gry)
print(txt[2:])