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