сопоставление шаблонов с несколькими объектами opencv python - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть документ с отсканированным изображением, подобный следующему: document sample

Это изображение было отсканировано с использованием обычного механизма сканирования, поэтому возможен перекос документа. изображение было выполнено в процессе бинаризации, поэтому все еще остается немного шума. Я хочу знать, где находится этот шаблон на картинке. это шаблон:

the template I'm looking for

моим ожидаемым результатом была координата расположения шаблона внутри документа изображения в виде массива, подобного этому:

[[35,1532], [1923,20], [1923,1532]]

Мне нужны подсказки, если результаты правильные, например, добавление прямоугольников вокруг совпавшего шаблона. Я пробовал этот код:

img = cv2.imread('image_document.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
template = cv2.imread('template.jpg',0)

# run template matching, get minimum val
res = cv2.matchTemplate(gray, template, cv2.TM_SQDIFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

# create threshold from min val, find where sqdiff is less than thresh
min_thresh = (min_val) * 1.5
match_locations = np.argwhere(res<=min_thresh)

# draw template match boxes
w, h = template.shape[::-1]
for (x, y) in zip(match_locations[1], match_locations[0]):
    cv2.rectangle(img, (x, y), (x+w, y+h), [0,255,255], 2)

# display result
cv2.imwrite('result.jpg', img)

, но фактический результат - прямоугольник слишком большой и не совпадать с шаблоном

...