Как изолировать рукописный текст от изображения, используя OpenCV и Python? - PullRequest
1 голос
/ 27 сентября 2019

Как выделить или обрезать только рукописный текст, используя OpenCV и Phyton для изображения:

Handwritten image

Я пытался использовать:

cv2.findContours

но из-за шума (фон и грязь на бумаге) я не могу достать только бумагу.

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Преобразовать в оттенки серого, сильно разрушить и преобразовать в двоичную форму.Забудьте шум.

enter image description here

0 голосов
/ 28 сентября 2019

Для сглаживания зашумленных изображений типичными методами являются применение некоторого типа фильтра размытия.Например, cv2.GaussianBlur(), cv2.medianBlur() или cv2.bilaterialFilter() можно использовать для удаления шума соли / перца.После размытия мы можем пороговое значение, чтобы получить двоичное изображение, а затем выполнить морфологические операции.Отсюда мы можем найти контуры и фильтр, используя соотношение сторон или площадь контура.Чтобы обрезать ROI, мы можем использовать Numpy Slicing


Обнаруженный текст

enter image description here

Извлеченный ROI

enter image description here

Код

import cv2

image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.medianBlur(gray, 5)
thresh = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV,11,8)

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
dilate = cv2.dilate(thresh, kernel, iterations=6)
cnts = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)

for c in cnts:
    x,y,w,h = cv2.boundingRect(c)
    ROI = image[y:y+h, x:x+w]
    cv2.imwrite('ROI.png', ROI)
    break

cv2.imshow('thresh', thresh)
cv2.imshow('dilate', dilate)
cv2.imshow('ROI', ROI)
cv2.waitKey()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...