Как отделить текст переднего плана от шумного фона в Python? - PullRequest
2 голосов
/ 07 ноября 2019

Я пытаюсь извлечь текст из этого изображения

this image.

Я пытался настроить контраст и яркость, сглаживание (например, GaussianBlur, medianblur) и пороговые методы (например, Otsu)с OpenCV все еще остается много шума.

Могу ли я попробовать еще что-нибудь?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Вы можете попробовать сочетание размытия по Гауссу, определения порога и морфологических операций, чтобы изолировать текст. Вот конвейер

Размытие -> Порог -> Открытие -> Расширение -> Побитовый и

enter image description here enter image description here enter image description here enter image description here enter image description here

import cv2

image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (7,7), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,2))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=3)

# Repair text
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7,7))
dilate = cv2.dilate(opening, kernel, iterations=2)

# Bitwise-and with input image
result = cv2.bitwise_and(image,image,mask=dilate)
result[dilate==0] = (255,255,255)

cv2.imshow('thresh', thresh)
cv2.imshow('opening', opening)
cv2.imshow('dilate', dilate)
cv2.imshow('result', result)
cv2.waitKey()
0 голосов
/ 07 ноября 2019

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


Я предполагаю, что

извлекает текст из этого изображения

означает, что вы хотите, чтобы текст с этого изображения представлял собой строку или ROI текста.

Это то, что называется OCR (оптическое распознавание символов), и представляет собой довольно сложную проблему глубокого обучения специально для типа. размещенного вами изображения (шум, низкая резкость, низкий динамический диапазон и т. д.). Если вы ищете ванильную библиотеку OpenCV, которая может сделать это из коробки, то, насколько я знаю, ее нет.

Проверьте эти ссылки для получения исходного кода и объяснения -

  1. OCR с pytesseract
  2. Обнаружение текстовой РИ с использованием EAST
...