void
matchtemplate
( inputarray image, inputarray templ,
outputarray result,
int method, inputarray mask =
noarray()
);
method:方法:有以下6種
差值平方和匹配 cv_tm_sqdiff
標準化差值平方和匹配 cv_tm_sqdiff_normed
相關匹配 cv_tm_ccorr
標準相關匹配 cv_tm_ccorr_normed
相關匹配 cv_tm_ccoeff
標準相關匹配 cv_tm_ccoeff_normed
前面兩種方法為越小的值表示越匹配,後四種方法值越大越匹配。
其實模板匹配的使用和直方圖反向投影calcbackproject函式很像,只是直方圖反向投影對比的是直方圖,而模板匹配對比的是影象的畫素值,相比較而言,直方圖反向投影的匹配魯棒性更好。
這個函式因為只能在影象中搜尋出指定的模板,如果模板是從待搜尋目標中擷取出來的,效果會很好,如果模板不是待搜素影象的一部分,效果就差的多了,主要表現在它只能進行平行移動,若原影象中的匹配目標發生旋轉或大小變化,該演算法無效。
#include
#include
#include
#include
using
namespace std;
using
namespace cv;
void
main()
{ cv::mat img1 = cv::
imread
("c:\\users\\administrator\\desktop\\tmp.png");
cv::mat img2 = cv::
imread
("c:\\users\\administrator\\desktop\\tmp1.png");
cv::
imshow
("【被查詢的影象】"
, img1)
; cv::
imshow
("【模版影象】"
, img2)
;//步驟二:建立乙個空畫布用來繪製匹配結果
cv::mat dstimg;
dstimg.
create
(img1.dims,img1.size,img1.
type()
);cv::
imshow
("createimg"
,dstimg)
;//步驟三:匹配,最後乙個引數為匹配方式,共有6種,詳細請查閱函式介紹
cv::
matchtemplate
(img1, img2, dstimg,0)
;//步驟四:歸一化影象矩陣,可省略
cv::
normalize
(dstimg, dstimg,0,
1,32)
;//步驟五:獲取最大或最小匹配係數
//首先是從得到的 輸出矩陣中得到 最大或最小值(平方差匹配方式是越小越好,所以在這種方式下,找到最小位置)
//找矩陣的最小位置的函式是 minmaxloc函式
cv::point minpoint;
cv::point maxpoint;
double
*minval =0;
double
*maxval =0;
cv::
minmaxloc
(dstimg, minval, maxval,
&minpoint,
&maxpoint)
;//步驟六:開始正式繪製
cv::
rectangle
(img1, minpoint, cv::
point
(minpoint.x + img2.cols, minpoint.y + img2.rows)
, cv::
scalar(0
,255,0
),2,
8); cv::
imshow
("【匹配後的影象】"
, img1)
; cv::
rectangle
(dstimg, minpoint, cv::
point
(minpoint.x + img2.cols, minpoint.y + img2.rows)
, cv::
scalar(0
,0,0
),3,
8); cv::
imshow
("【匹配後的計算過程影象】"
, dstimg)
; cv::
waitkey(0
);
OpenCV Python 模板匹配 三十一
在本章中,您將學習 如果輸入影象的大小為 wxh 而模板影象的大小為 wxh 則輸出影象的大小將為 w w 1,h h 1 得到結果後,可以使用cv.minmaxloc 函式查詢最大 最小值在哪。將其作為矩形的左上角,並以 w,h 作為矩形的寬度和高度。該矩形是您模板的區域。注意如果使用cv.tm ...
資料型別不匹配 CV學習筆記(十一) 模板匹配
在這一篇文章中,我們將會了解數字影象處理中重要的組成部分之一的模板匹配。一 什麼是模板匹配?在opencv教程中這樣解釋模板匹配 模板匹配是一項在一幅影象中尋找與另一幅模板影象最匹配 相似 部分的技術.這裡說的模板是我們已知的小影象,模板匹配就是在一副大影象中搜尋目標。模板就是我們已知的在圖中要找的...
OpenCV模板匹配
include include opencv2 opencv.hpp using namespace std using namespace cv int main int argc,char argv load reference image img imread argv 1 always ch...