TemplateMatchModes:

·TM-SQDIFF 计算平方不同,计算出来的值越小,越相关
·TM_CCORR 计算相关性,计算出来的值越大,越相关
·TM_CCOEFF 计算相关系数,计算出来的值越大,越相关
·TM_SQDIFF_NORMED 计算归一化平方不同,计算出来的值越接近0,越相关
·TM_CCORR_NORMED 计算归一化相关性,计算出来的值越接近1,越相关
`TM_CCOEFF_NORMED 计算归一化相关系数,计算出来的值越接近1,越相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#TemplateMatchModes
'''

·TM-SQDIFF 计算平方不同,计算出来的值越小,越相关
·TM_CCORR 计算相关性,计算出来的值越大,越相关
·TM_CCOEFF 计算相关系数,计算出来的值越大,越相关
·TM_SQDIFF_NORMED 计算归一化平方不同,计算出来的值越接近0,越相关
·TM_CCORR_NORMED 计算归一化相关性,计算出来的值越接近1,越相关
`TM_CCOEFF_NORMED 计算归一化相关系数,计算出来的值越接近1,越相关

'''
import cv2
img = cv2.imread("dm.png")
template = cv2.imread("dm_face.png")
h,w = template.shape[:2]

print(img.shape)
print(template.shape)

#模板匹配
'''
模板匹配和卷积原理很像,模板在原图像上从原点开始滑动,计算模板与(图像被模板覆盖的地方)的差别程度,这个差别程度的计算方法在Opencv有6种
然后在每次计算的结果放入一个矩阵里作为结果输出。

假如原图形是AxB,而模板是axb大小,则输出为(A-a+1)x(B-b+1)

'''
methods = ['cv2.TM_CCOEFF','cv2.TM_CCOEFF_NORMED','cv2.TM_CCORR','cv2.TM_CCORR_NORMED',
'cv2.TM_SQDIFF','cv2.TM_SQDIFF_NORMED']

res = cv2.matchTemplate(img,template,1) # 1可以换成 cv2.TM_SQDIFF
print(res.shape)
# cv2.imshow('res',res)
# cv2.waitKey(0)

min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(res)

print("min_val:{}".format(min_val))
print("max_val:{}".format(max_val))
print("min_loc:{}".format(min_loc))
print("man_loc:{}".format(max_loc))

image-20230304195120954