如何读取matchTemplate的结果(python中的OpenCV2)
以下代码实际上是我立即打印出来的结果:如何读取matchTemplate的结果(python中的OpenCV2),python,opencv,image-processing,opencv-python,template-matching,Python,Opencv,Image Processing,Opencv Python,Template Matching,以下代码实际上是我立即打印出来的结果: result = cv.matchTemplate(haystack_img, needle_img, cv.TM_SQDIFF_NORMED 图片大小: 干草堆=27x16 打捆针直径=7x7 然而,我真的不明白这意味着什么 输出将为您提供一个大小为21 x 10的响应图像,其中7 x 7针状img模板从左到右滑动,从上到下滑动,提取与模板一致的每个7 x 7窗口并计算相关性。注意输出的大小减小了。它比搜索图像小,因为假设模板完全适合图像内部 但是,您
result = cv.matchTemplate(haystack_img, needle_img, cv.TM_SQDIFF_NORMED
图片大小:
干草堆=27x16
打捆针直径=7x7
然而,我真的不明白这意味着什么
输出将为您提供一个大小为21 x 10的响应图像,其中7 x 7针状img模板从左到右滑动,从上到下滑动,提取与模板一致的每个7 x 7窗口并计算相关性。注意输出的大小减小了。它比搜索图像小,因为假设模板完全适合图像内部
但是,您选择的度量是距离度量cv2.TM_SQDIFF_NORMED。对于此响应图像中的每个元素,它提供了模板和每个窗口之间的差异性。提供最小值的位置意味着,如果将模板的左上角放置在此位置,则该位置是模板与图像最匹配的位置
以下代码将绘制一个边界框,其中模板在haystack图像中最匹配:
结果=cv2.matchTemplatehaystack\u img、针头\u img、cv.TM\u SQDIFF\u NORMED
最小值,最大值,最小位置,最大位置=cv2.minMaxLocresult
左上=最小位置
w、 h=7,7
右下=左上[0]+w,左上[1]+h
img_to_show=干草堆img.copy
cv2.矩形显示,左上角,右下角,255,2
cv2.imshowResult,img_至_show
cv2.0
运行模板匹配,然后使用cv2.minMaxLoc查找最小值和最大值以及它们在图像中的位置。我们希望使用最小值的位置,给定使用距离的方法。min_loc将提供模板最匹配位置左上角的列和行坐标。我们根据模板的尺寸创建右下角坐标,然后创建图像的新副本,并在其上绘制一个白色矩形,表明您是最匹配的模板,然后在最后显示图像。输出将为您提供一个大小为21 x 10的响应图像,其中7 x 7针头模板在图像上从左到右滑动,从上到下滑动,每个7 x 7窗口重合使用该模板提取并计算相关性。注意输出的大小减小了。它比搜索图像小,因为假设模板完全适合图像内部
但是,您选择的度量是距离度量cv2.TM_SQDIFF_NORMED。对于此响应图像中的每个元素,它提供了模板和每个窗口之间的差异性。提供最小值的位置意味着,如果将模板的左上角放置在此位置,则该位置是模板与图像最匹配的位置
以下代码将绘制一个边界框,其中模板在haystack图像中最匹配:
结果=cv2.matchTemplatehaystack\u img、针头\u img、cv.TM\u SQDIFF\u NORMED
最小值,最大值,最小位置,最大位置=cv2.minMaxLocresult
左上=最小位置
w、 h=7,7
右下=左上[0]+w,左上[1]+h
img_to_show=干草堆img.copy
cv2.矩形显示,左上角,右下角,255,2
cv2.imshowResult,img_至_show
cv2.0
运行模板匹配,然后使用cv2.minMaxLoc查找最小值和最大值以及它们在图像中的位置。我们希望使用最小值的位置,给定使用距离的方法。min_loc将提供模板最匹配位置左上角的列和行坐标。我们根据模板的尺寸创建右下角的坐标,然后创建一个新的图像副本,并在其上绘制一个白色矩形,表明您是最匹配的模板,然后在最后显示图像。感谢@rayryeng的回复,并对此进行了进一步解释~ 结果: 位置0,0为0.05779364 位置0,1为0.03569747 图片大小: 干草堆=27x16 打捆针直径=7x7 由于图像由每个像素进行比较,因此X和Y位置可以计算为 X:27-7+1=21 Y:16-7+1=10 X:0,1,2,3,21=每个列表中的位置 也等于
len(result[0])
len(result)
[
]
Y:0,1,2,3,4,5=列表中的位置也等于
len(result[0])
len(result)
[
]
官方文件:
谢谢@rayryeng的回复,再解释一下~ 结果: 位置0,0为0.05779364 位置0,1为0.03569747 图片大小: 干草堆=27x16 打捆针直径=7x7 由于图像由每个像素进行比较,因此X和Y位置可以计算为 X:27-7+1=21 Y:16-7+1=10 X:0,1,2,3,21=每个列表中的位置 也等于
len(result[0])
len(result)
[
]
Y:0,1,2,3,4,5=列表中的位置也等于
len(result[0])
len(result)
[
]
官方文件: