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
import cv2
import numpy as np
#TemplateMatchModes
'''

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

'''
img = cv2.imread("face.png",cv2.IMREAD_COLOR)
cv2.imshow("img",img)
cv2.waitKey(2000)

#灰度化
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
print(img_gray.shape)
#img_index = img_gray[100:220,300:430]
cv2.imshow("img_gray",img_gray)
cv2.waitKey(2000)

template = cv2.imread('face_template.png',cv2.COLOR_BGRA2GRAY) #导入已灰度化脸部图片
print(template.shape)
h,w = template.shape[:2] # 读取图片的长和宽

res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
#取匹配程度大于80%的坐标
loc = np.where(res >= threshold)
for pt in zip(*loc[::-1]): #*号表示可选参数
bottom_right = (pt[0] + w ,pt[1] +h )
cv2.rectangle(img_gray,pt,bottom_right,(255,0,0),1)

cv2.imshow('img_rgb',img_gray)
cv2.waitKey(0)
cv2.destroyWindow()

image-20230304172937823