Обнаружение полей прямоугольной подписи при сканировании документов с использованием OpenCV - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь извлечь прямоугольные большие коробки из изображений документов с подписями в нем.Поскольку у меня нет тренировочных данных (для глубокого обучения), я хочу вырезать прямоугольные прямоугольники (по 3 на всех изображениях) из этих изображений, используя OpenCV.

Вот что я пробовал:

import numpy as np
import cv2
img = cv2.imread('S-0330-444-20012800.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,127,255,1)
contours,h = cv2.findContours(thresh,1,2)
for cnt in contours:
    approx = cv2.approxPolyDP(cnt,0.02*cv2.arcLength(cnt,True),True)
    if len(approx)==4:
        cv2.drawContours(img,[cnt],0,(26,60,232),-1)

cv2.imshow('img',img)
cv2.waitKey(0)

пример изображения

С помощью приведенного выше кода я получаю много квадратов (около 152 маленькихточки как квадраты) и, конечно, не 3 коробки.

Ответы приветствуются.[образец изображения прилагается]

1 Ответ

0 голосов
/ 14 марта 2019

Я бы посоветовал вам прочитать шаблон соответствия . Здесь также есть хороший OpenCV учебник .

Для вашего случая использования идея состоит в том, чтобы создать стереотипное изображение прямоугольной рамки той же формы (отношение ширины / высоты), что и поля, найденные в ваших документах. В зависимости от того, показывают ли ваши входные изображения документ всегда в одном и том же масштабе или нет, вам потребуется либо изменить размер входных данных, чтобы сохранить их увеличение постоянным, либо вам необходимо работать с банком шаблонов (например, массивом шаблонов блоков в различных окалина).

Вкратце, вы бы взаимно коррелировали поле (я) шаблона с входным изображением и (в случае хорошо подобранного масштабирования) находили бы идеально относительно острые пики, указывающие центры ваших блоков документов.

...