|
背景簡介
模板匹配通常被用于目標檢測、相似度分析中,opencv2和opencv3中提供了一個專門用于模板匹配的函數(shù)matchTemplate(),下面就對該函數(shù)以及其它設(shè)計的函數(shù)進行詳細的介紹
函數(shù)說明
1、matchTemplate(image,template,method)
參數(shù)說明:
image :源圖,待搜索圖像 template:模版圖像,需要搜索的圖像 method:計算匹配程度的方法,具體method方法有如下:
1 2 3 4 5 6 | CV_TM_SQDIFF 平方差匹配法:該方法采用平方差來進行匹配;最好的匹配值為0;匹配越差,匹配值越大
CV_TM_CCORR 相關(guān)匹配法:該方法采用乘法操作;數(shù)值越大表明匹配程度越好
CV_TM_CCOEFF 相關(guān)系數(shù)匹配法:1表示完美的匹配;-1表示最差的匹配
CV_TM_SQDIFF_NORMED 歸一化平方差匹配法
CV_TM_CCORR_NORMED 歸一化相關(guān)匹配法
CV_TM_CCOEFF_NORMED 歸一化相關(guān)系數(shù)匹配法
|
最后,可cvMinMaxLoc() 函數(shù)獲取最后的最佳匹配結(jié)果
2、minMaxLoc(res)
minMaxLoc尋找矩陣(一維數(shù)組當作向量,用Mat定義) 中最小值和最大值的位置 注意:多通道圖像在使用minMaxLoc()函數(shù)是不能給出其最大最小值坐標的,因為每個像素點其實有多個坐標,所以是不會給出的。因此在編程時,這2個位置應(yīng)該給NULL。
res 為 上面函數(shù) matchTemplate 所匹配到的結(jié)果為參數(shù)
min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(res)
我們定義一下變量用于接收minMaxLoc獲取匹配的圖像的匹配值和坐標
min_val:最小匹配值 max_val:最大匹配值 min_loc:最小坐標 max_loc:最大坐標
舉個例子
找出模版圖片在原圖中的為之并標注
源圖片 
模版圖片 
實現(xiàn)代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | import cv2
imgsr=cv2.imread("/Users/laoyan/Desktop/sourcetest.png")
imgtm=cv2.imread("/Users/laoyan/Desktop/templatewatchtest.png")
#獲取模板圖片的高和寬
imgtmh1 = imgtm.shape[0]
imgtmw1 = imgtm.shape[1]
#與模版比對
res=cv2.matchTemplate(imgsr,imgtm,cv2.TM_CCOEFF_NORMED)
min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(res)
img=cv2.rectangle(imgsr,max_loc,(max_loc[0]+imgtmw1,max_loc[1]+imgtmh1),(0,0,255),2)
cv2.imshow('Image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
|
結(jié)果如下: 
|