- import cv2 as cv
- import numpy as np
- def template():
- #模板圖片
- tpl=cv.imread('12tem.jpg')
- #目標圖片
- target=cv.imread('12.jpg')
- cv.imshow('template',tpl)
- cv.imshow('target',target)
- methods=[cv.TM_SQDIFF_NORMED,cv.TM_CCORR_NORMED,cv.TM_CCOEFF_NORMED]
- #獲得模板的高寬
- th,tw=tpl.shape[:2]
- for md in methods:
- #執行模板匹配
- #target:目標圖片
- #tpl:模板圖片
- #匹配模式
- result=cv.matchTemplate(target,tpl,md)
- #尋找矩陣(一維數組當作向量,用Mat定義) 中最小值和最大值的位置
- 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)
- #繪製矩形邊框,將匹配區域標註出來
- #target:目標圖像
- #tl:矩形定點
- #br:舉行的寬高
- #(0,0,255):矩形邊框顏色
- #2:矩形邊框大小
- cv.rectangle(target,tl,br,(0,0,255),2)
- cv.imshow('match-'+np.str(md),target)
- template();
- cv.waitKey(0)
- cv.destroyAllWindows()