Android — Поиск контуров со строками текста в OpenCV

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

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

введите описание изображения здесь

1

Решение

Для этого есть последовательность шагов:

  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)

введите описание изображения здесь

#--- 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)

введите описание изображения здесь

#---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)

введите описание изображения здесь

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]