Удалите ненужные отметки при обработке изображений с помощью opencv - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь извлечь текст из изображения ниже с помощью Tesseract:

enter image description here

Tesseract выдает результат как: etiocsat "Если я удаляюпометив галочкой (выделено желтым цветом) вручную, отредактировав изображение, Tesseract выдает правильный текст. Как мне удалить выделенную часть, используя opencv в python?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Вы можете фильтровать символы непосредственно в Tesseract:

import pytesseract
from PIL import Image

text = pytesseract.image_to_string(Image.open('image.png'), lang='eng', config='-c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')

Вывод:

CTLDCBGT
0 голосов
/ 18 февраля 2019

Вы можете использовать функцию findContours () OpenCV и снимать галочку в зависимости от области.

Сначала необходимо преобразовать изображение в двоичное, а затем инвертировать изображение, а затем удалить меньшие контуры в зависимости от площади.Ниже приведен фрагмент кода для выполнения этой задачи:

import cv2
import pytesseract

im = cv2.imread("4SPb7.png")
# RGB to grayscale conversion
im_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

# grayscale to binary
_, im_bw = cv2.threshold(im_gray, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)

# invert image
im_bw = 255-im_bw

# find contours
_, cnts, hierarchy = cv2.findContours(im_bw, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)

# remove small components based on area
if cnts is not None:
    for i in range(0, len(cnts)):
        a = cv2.contourArea(cnts[i])
        if a < 30:
            cv2.drawContours(im_bw, cnts, i, 0, cv2.FILLED)

im_bw = 255-im_bw
print(pytesseract.image_to_string(im_bw))

Вывод:

CTLDC8GT

Вывод изображения:

output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...