输出为您提供 响应 图像,大小为 21 x 10,其中 7 x 7 needle_img 模板从左到右和从上到下滑过图像,其中每个 7 x提取与模板重合的7个窗口并计算相关性。请注意输出大小的减小。它比搜索图像小,因为假定模板完全适合图像。
但是,您选择的指标是距离指标 (cv2.TM_SQDIFF_NORMED)。对于此响应图像中的每个元素,它会为您提供模板和每个窗口之间的差异。为您提供最小值的位置意味着如果您将模板的左上角放置在此位置,则这是模板与图像最匹配的位置。
这里有一些代码将绘制一个边界框,其中模板在 haystack 图像中最匹配:
result = cv2.matchTemplate(haystack_img, needle_img, cv.TM_SQDIFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
top_left = min_loc
w, h = (7, 7)
bottom_right = (top_left[0] + w, top_left[1] + h)
img_to_show = haystack_img.copy()
cv2.rectangle(img_to_show, top_left, bottom_right, 255, 2)
cv2.imshow("Result", img_to_show)
cv2.waitKey(0)
运行模板匹配,然后使用cv2.minMaxLoc 查找最小值和最大值以及它们在图像中的位置。给定您正在使用的方法(距离),我们希望使用最小值的位置。 min_loc 将提供模板应该最匹配的左上角的列和行坐标。我们根据模板的尺寸创建右下角坐标,然后创建图像的新副本并在其上绘制一个白色矩形,显示您是最匹配的模板,然后在最后显示图像。