контуры cv2 не могут обнаружить некоторые формы - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь извлечь символы из формы для распознавания текста и после экспериментов с подключенными компонентами, MSER и контурами, нашел контуры наиболее надежными.Проблема, однако, заключается в том, что иногда он не может обнаружить формы, которые очень похожи на те, которые он уже обнаружил.Например, на прилагаемом изображении «A» в строке № 1, столбец 4 не обнаружен, в то время как всего в 2 столбцах это так!То же самое для «А» в строке 3 (столбец 3 против столбца 7).Contoured image( thin green borders)

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

im = cv2.imread('IMAGES/ACH0.png')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
imgray = cv2.GaussianBlur(imgray, (5, 5), 0)
(ret, thresh) = cv2.threshold(imgray, 127, 255, cv2.THRESH_BINARY_INV +cv2.THRESH_OTSU
im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_LIST ,cv2.CHAIN_APPROX_SIMPLE)
areas = [cv2.contourArea(c) for c in contours]
for ctr in range(len(areas)):
  if areas[ctr] > 10000: continue
  cnt=contours[ ctr ]

  x,y,w,h = cv2.boundingRect(cnt)
  cv2.rectangle(im,(x,y),(x+w,y+h),(0,255,0),1)

Я попытался прочитать о внутренней работе реализации cv2 findContours, но не смогне могу найти какие-либо ресурсы на нем (если бы я мог найти его, я мог бы по крайней мере отладить и понять, почему это происходит).Любые указатели будут с благодарностью признаны.

1 Ответ

0 голосов
/ 08 октября 2018

Символы, которые касаются сетки, не могут быть изолированы, потому что они принадлежат большему BLOB-объекту.

Поскольку сетка выглядит хорошо выровненной, вы можете попытаться найти линии сетки и стереть их перед выполнением OCR.

enter image description here

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