Как извлечь текст в изображении в градациях серого, который имеет другие функции, такие как царапины в OpenCV - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь удалить только текстовую область изображения как можно ближе, потому что хочу удалить царапины на поверхности. Проблема здесь в том, что текст лазера на корпусе, и вполне возможно, что на корпусе есть царапины, которые я хочу обнаружить. Вот несколько примеров (Слева - изображение маски, созданное с помощью пороговой обработки, среднее изображение - это то, где я удалил текст с окраской, а правое - исходное изображение):

enter image description here

На этом рисунке мы видим царапину слева внизу и две царапины в области, где находится текст. Я порождаю изображение, чтобы получить маску, а затем использую метод inpaint. Это прекрасно работает, но я просто хочу сделать рисование для текста, а не царапин.

Это метод, в котором я делаю рисование:

    def MaskOutMarking(self, img):
    # Binary threshold image
    mask = cv2.threshold(img, 150, 255, cv2.THRESH_BINARY)[1]

    # Remove small noise
    inp_mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE,cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)))

    cv2.imshow('Mask', mask)
    cv2.waitKey(0)

    # Dilate mask
    inp_mask = cv2.dilate(inp_mask,
                          cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (15, 15)))

    # Inpaint
    dst = cv2.inpaint(img, inp_mask, 15, cv2.INPAINT_NS)

    #cv2.imshow('Mask', inp_mask)
    #cv2.waitKey(0)

    return dst

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

Вот оригинальное изображение:

enter image description here

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