模板匹配
模板匹配
模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。
在OpenCV中提供了6种匹配度量方法。
- 平方差匹配法CV_TM_SQDIFF
- 归一化平方差匹配法CV_TM_SQDIFF_NORMED
- 相关匹配法CV_TM_CCORR
- 归一化相关匹配法CV_TM_CCORR_NORMED
- 系数匹配法CV_TM_CCOEFF
- 化相关系数匹配法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()
|