Поиск контуров со строками текста в OpenCV - PullRequest
0 голосов
/ 09 июня 2018

Я пишу программу распознавания текста, и у меня проблема с контурами сортировки.Программа отлично работает для одной строки текста, но когда дело доходит до целого блока текста, моя программа не обнаруживает строки текста примерно в 80% случаев.Каким был бы действительно эффективный способ извлечь строку текста, а затем все остальные строки (по одной за раз)?

Что я хочу достичь:

enter image description here

1 Ответ

0 голосов
/ 09 июня 2018

Существует последовательность шагов для достижения этой цели:

  1. Найдите оптимальный порог для бинаризации вашего изображения.Я использовал порог Оцу.
  2. Найдите подходящую морфологическую операцию, которая сформирует один регион вдоль горизонтального направления.Выберите ядро, ширина которого больше высоты.
  3. Нарисуйте ограничивающие рамки над полученными контурами

ОБНОВЛЕНИЕ

Вот реализация:

x = 'C:/Users/Desktop/text.jpg' 

img = cv2.imread(x)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  

#--- performing Otsu threshold ---
ret,thresh1 = cv2.threshold(gray, 0, 255,cv2.THRESH_OTSU|cv2.THRESH_BINARY_INV)
cv2.imshow('thresh1', thresh1)

enter image description here

#--- choosing the right kernel
#--- kernel size of 3 rows (to join dots above letters 'i' and 'j')
#--- and 10 columns to join neighboring letters in words and neighboring words
rect_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15, 3))
dilation = cv2.dilate(thresh1, rect_kernel, iterations = 1)
cv2.imshow('dilation', dilation)

enter image description here

#---Finding contours ---
_, contours, hierarchy = cv2.findContours(dilation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

im2 = img.copy()
for cnt in contours:
        x, y, w, h = cv2.boundingRect(cnt)
        cv2.rectangle(im2, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imshow('final', im2)

enter image description here

...