Open CV系列学习笔记(十一)模板匹配
模板匹配
模板匹配就是在整个图像区域发现与给定子图像匹
配的小块区域。
所以模板匹配首先需要一个模板图像T(给定的子
图像)
另外需要一个待检测的图像-源图像S
工作方法,在带检测图像上,从左到右,从上向下
计算模板图像与重叠子图像的匹配度,匹配程度越
大,两者相同的可能性越大。
模板匹配算法
代码:
def template_demo():#三种模板匹配方法
tpl = cv.imread("E:/picture/31.jpg")
target = cv.imread("E:/picture/30.jpg")
cv.imshow("template image",tpl)
cv.imshow("target image",target)
methods = [cv.TM_SQDIFF_NORMED,cv.TM_CCORR_NORMED,cv.TM_CCOEFF_NORMED]
th,tw = tpl.shape[:2]
for md in methods:
print(md)
result = cv.matchTemplate(target, tpl, md)
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result)
if md == cv.TM_SQDIFF_NORMED:
tl = min_loc
else:
tl = max_loc
br = (tl[0] + tw, tl[1] + th)
cv.rectangle(target, tl, br, (0, 0, 255), 2)
cv.imshow("match-" + np.str(md), target)
结果:
完整代码:
import cv2 as cv
import numpy as np
def template_demo():#三种模板匹配方法
tpl = cv.imread("E:/picture/31.jpg")
target = cv.imread("E:/picture/30.jpg")
cv.imshow("template image",tpl)
cv.imshow("target image",target)
methods = [cv.TM_SQDIFF_NORMED,cv.TM_CCORR_NORMED,cv.TM_CCOEFF_NORMED]
th,tw = tpl.shape[:2]
for md in methods:
print(md)
result = cv.matchTemplate(target, tpl, md)
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result)
if md == cv.TM_SQDIFF_NORMED:
tl = min_loc
else:
tl = max_loc
br = (tl[0] + tw, tl[1] + th)
cv.rectangle(target, tl, br, (0, 0, 255), 2)
cv.imshow("match-" + np.str(md), target)
cv.imshow("match-" + np.str(md), result)
print("--------HEllow Python-------")
src = cv.imread("E:/picture/30.jpg")
#cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
#cv.imshow("input image",src)
template_demo()
cv.waitKey(0)
cv.destroyAllWindows()