Адаптивная обработка порога для больших черных букв - PullRequest
0 голосов
/ 18 января 2019

У меня есть документ с очень большими и очень маленькими буквами, и я применяю адаптивный порог к нему.

cvtColor(mbgra, dst, CV_BGR2GRAY);
GaussianBlur(dst, dst, Size(11, 11), 0);
adaptiveThreshold(dst, dst, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 11, 3);

Алгоритм работает отлично, но у меня есть небольшая проблема с большими черными буквами, так как изнутри это становится пустым enter image description here

На оригинальном изображении эти буквы заполнены черным

enter image description here

Вопрос в том, как сделать так, чтобы эти буквы были заполнены черными, как на оригинальном изображении, без увеличения размера блока фильтра, поскольку это не будет хорошо работать с маленькими буквами!

Любые мысли или предложения, конечно, приветствуются!

1 Ответ

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

следующий код:

import numpy as np
import cv2
import matplotlib.pyplot as plt

image = cv2.imread("FYROJ.png")
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 3)

im_contours, contours, hier = cv2.findContours(thresh, mode=cv2.RETR_TREE, method=cv2.CHAIN_APPROX_NONE)
hier = hier[0]
kept_contours = [contour for idx, contour in enumerate(contours) if hier[idx][2] >= 0]

drawing = np.zeros_like(gray)
cv2.drawContours(drawing, kept_contours, -1, color=255)

ret, markers = cv2.connectedComponents(drawing)

watershed_res = cv2.watershed(image, np.int32(markers))

plt.imshow(watershed_res)
plt.show()

Сгенерирует это изображение: enter image description here

Может быть, попытаться начать отсюда и выбрать регионы, где в исходном изображении много черных пикселей ...

...