Python-OpenCV 笔记9 – 模板匹配
1、模板匹配:matchTemplate()
函数原型:
matchTemplate(image, templ, method[, result[, mask]])
参数:
- image:待搜索图像,数据类型必须是8位或32位浮点数
- templ:搜索模板,它必须不大于待搜索图像并具有相同的数据类型
- method:匹配的方法
- cv2.TM_SQDIFF:平方差匹配法,结果值越小越匹配
- cv2.TM_SQDIFF_NORMED:归一化平方差匹配法,结果值在 [0, 1],越小越匹配
- cv2.TM_CCOPP:相关匹配法
- cv2.TM_CCOPP_NORMED:归一化相关匹配法
- result:存放结果的图像,必须为单通道32位浮点数类型
- mask:搜索模板的掩码图,它必须与 templ 具有相同的数据类型和大小,默认不设置。目前仅支持 TM_SQDIFF和 TM_CCORR_NORMED 方法
返回:
每个像素点(对应模板的左上角点)进行一次匹配,待搜索图大小:W×H 模板大小:w×h,结果图大小: (W−w+1)×(H−h+1)
2、示例
import cv2
import numpy as np
# 读取待搜索图
src_img = cv2.imread('src.jpg', 0)
template_img = cv2.imread('templ.jpg', 0)
w, h = template_img.shape[::-1]
res = cv2.matchTemplate(src_img, template_img, cv2.TM_CCOEFF_NORMED)
threshold = 0.7
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
cv2.rectangle(src_img, pt, (pt[0] + w, pt[1] + h), 255, 2)
cv2.imshow('match', src_img)
cv2.waitKey()
cv2.destroyAllWindows()
GOOD LUCK!