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))
|
