У меня есть документ с отсканированным изображением, подобный следующему:
Это изображение было отсканировано с использованием обычного механизма сканирования, поэтому возможен перекос документа. изображение было выполнено в процессе бинаризации, поэтому все еще остается немного шума. Я хочу знать, где находится этот шаблон на картинке. это шаблон:
моим ожидаемым результатом была координата расположения шаблона внутри документа изображения в виде массива, подобного этому:
[[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)
, но фактический результат - прямоугольник слишком большой и не совпадать с шаблоном