Сортировка контуров сверху вниз и слева направо при разборе PDF-документа - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь проанализировать документ PDF, преобразовав его в изображения с помощью библиотеки "pdf2image" в python, а затем пытаюсь найти контуры следующим образом:

cv2_image = cv2.imread(image, 1)
blackText_whiteBackground = back_rm(cv2_image)
whiteText_blackBackground = black_white(blackText_whiteBackground)
blur_dilate = blur_and_dilate(whiteText_blackBackground)

cnts, _ = cv2.findContours(blur_dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

где blur_and_dilate. последний метод, который объявлен так:

def blur_and_dilate(img, iterations=20):
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    dilate = cv2.dilate(img, kernel, iterations=iterations)

    cv2.imwrite("blur_and_dilate.png", dilate)
    return dilate

Мой входной образ выглядит так:

enter image description here

Но после применяя сортировку в контурах следующим образом:

def sort_contours(cnts, cv2_image):
    boundingBoxes = [cv2.boundingRect(c) for c in cnts]

    sorted_ctrs = sorted(cnts, key=lambda ctr: cv2.boundingRect(ctr)[0] + cv2.boundingRect(ctr)[1] * cv2_image.shape[1])
    # return the list of sorted contours and bounding boxes
    return sorted_ctrs, boundingBoxes

Я получаю результат следующим образом:

Jaya Samhitha & Chandralekha 
Owner Name 
Flat No-302 Crest Homes, Alapati Nagar Colony,Mehdipatnam,Hyderabad-500028, Hyderabad,Andhra Pradesh, India,500028 
Owner Address 

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

...