模板匹配

模板匹配

模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。

在OpenCV中提供了6种匹配度量方法。

  1. 平方差匹配法CV_TM_SQDIFF
  2. 归一化平方差匹配法CV_TM_SQDIFF_NORMED
  3. 相关匹配法CV_TM_CCORR
  4. 归一化相关匹配法CV_TM_CCORR_NORMED
  5. 系数匹配法CV_TM_CCOEFF
  6. 化相关系数匹配法CV_TMCCOEFF_NORMED

通常来讲,随着从简单测量方法(平方差)到更复杂的测量方法(相关系数法),我们可以获得越来越准确的匹配。然而这同时也会以越来越大的计算量为代价。对于选取何种方法,针对不同的匹配情况进行对此分析比较,选取更适合自己应用场景同时兼顾速度和精度的最佳方案。 注意 :对于方法SQDIFF和SQDIFF_NORMED两种方法来讲,越小的值就有着更高的匹配结果,而其余的方法则是数值越大匹配效果越好。

示例代码如下:

 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
import cv2 as cv

# 加载原图
src = cv.imread("../img/zhaonimei.jpg")
cv.imshow("src",src)

# 加载模板
temp = cv.imread("../img/mei.jpg")
cv.imshow("template",temp)

result = cv.matchTemplate(src,temp,cv.TM_SQDIFF)

# 将结果进行归一化处理
cv.normalize(result,result,0,1,cv.NORM_MINMAX)

print(result)

# 求最大值最小值
min,max,minLoc,maxLoc = cv.minMaxLoc(result)

print(minLoc,maxLoc,min,max)

cv.rectangle(src,(minLoc[0],minLoc[1]),(minLoc[0] + temp.shape[1],minLoc[1] + temp.shape[0]),(0,0,255),2)

cv.imshow("dst",src)
cv.waitKey()