Я пишу программу распознавания текста, и у меня проблема с контурами сортировки. Программа отлично работает для одной строки текста, но когда дело доходит до целого блока текста, моя программа не обнаруживает строки текста примерно в 80% случаев. Каким был бы действительно эффективный способ извлечь строку текста, а затем все остальные строки (по одной за раз)?
Чего я хочу достичь:
Для этого есть последовательность шагов:
Вот реализация:
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)
Других решений пока нет …