1、模板匹配
#模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域
#所以模板匹配首先需要一个模板图像T(给定的子图像)
#另外需要一个待检测的图像----源图像
#工作方法,在待检测图像上,从左到右,从上向下计算模板图像与重叠子图像的匹配度,匹配程度越大,两者相同的可能性越大。
#--------------------------模板匹配-------------------------
# 匹配方法:
# 差值平方和匹配:CV_TM_SQDIFF
# 标准化差值平方和匹配:CV_TM_SQDIFF_NORMED
# 相关匹配:CV_TM_CCORR
# 标准相关匹配:CV_TM_CCORR_NORMED
# 相关匹配:CV_TM_CCOEFF
# 标准相关匹配:CV_TM_CCOEFF_NORMED
import cv2
import numpy as np
def template_demo():
tpl=cv2.imread('../opencv-python-img/roi.jpg')
target=cv2.imread('../opencv-python-img/target.jpg')
methods=[cv2.TM_SQDIFF_NORMED,cv2.TM_CCORR_NORMED,cv2.TM_CCOEFF_NORMED]
th,tw=tpl.shape[:2]
print(methods)
for md in methods:
print(methods)
print('md',md)
result=cv2.matchTemplate(target,tpl,md)
min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(result)
if md==cv2.TM_SQDIFF_NORMED:
tl=min_loc
else:
tl=max_loc
br=(tl[0]+tw,tl[1]+th)
cv2.rectangle(target,tl,br,(0,0,255),2)
#cv2.imshow('match-'+np.str(md),result)
cv2.imshow('match-'+np.str(md),target)
if __name__ == '__main__':
template_demo()
cv2.waitKey(0)