Как я могу снять задний декоративный рисунок для моего OCR? - PullRequest
0 голосов
/ 31 августа 2018

image

Я пробовал GaussianBlur и adaptiveThreshold, но этот вид орнамента на спине меня очень беспокоит.

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

1 Ответ

0 голосов
/ 31 августа 2018

Это полный код решения:

import cv2
import numpy as np
img = cv2.imread('test.png', 0)
img2 = np.zeros_like(img)
cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU,img)
image, contours, hier = cv2.findContours(img, cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

for c in contours:
    if cv2.contourArea(c)>50:
        cv2.drawContours(img2, c, -1, (255, 255, 255), -1)

kernel = np.ones((40, 10), np.uint8)
img2 = cv2.morphologyEx(img2, cv2.MORPH_CLOSE, kernel)
cv2.imshow("image", img2)
cv2.waitKey(0)

Сначала вы должны преобразовать изображение в двоичную форму, используя методы cv2.THRESH_BINARY и cv2.THRESH_OTSU. Результат будет таким:

image

После этого вы должны удалить шумы в результирующем изображении. Для этого я получил контуры изображения с помощью cv2.findContours и вычислил cv2.contourArea. Затем с помощью порога отфильтровывают небольшие контуры, чтобы удалить шумы. После этого для объединения размытых символов я выполнил cv2.morphologyEx.

Окончательный результат таков:

image

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