嘗試用OpenCV的模板匹配來定位和檢測

2021-08-01 22:01:51 字數 1914 閱讀 7258

cv_exports_w void matchtemplate( inputarray image, inputarray templ, outputarray result, int method );
模板匹配的工作方式:跟直方圖的反向投影基本一樣,大致過程是這樣的:通過在輸入影象image上滑**像塊,對實際的影象塊和模板影象templ進行匹配。

假設我們有一張100x100的輸入影象image,有一張10x10的模板影象templ,查詢的過程是這樣的:

(1)從輸入影象image的左上角(0,0)開始,切割一塊(0,0)至(10,10)的臨時影象;

(2)用臨時影象和模板影象templ進行對比,對比結果記為c,儲存在結果影象result的(0,0)處,即result在(0,0)處的畫素值;

(3)向右滑動切割影象塊,重複(1)~(2)的步驟,並記錄到結果影象result中;直到輸入影象image的右下角。

可見,直方圖反向投影對比的是直方圖,而模板匹配對比的是影象的畫素值;模板匹配比直方圖反向投影速度要快一些,但是有人認為直方圖反向投影的魯棒性會更好。

模板匹配的匹配方式method:

cv_tm_sqdiff 平方差匹配法:該方法採用平方差來進行匹配;最好的匹配值為0;匹配越差,匹配值越大。

cv_tm_ccorr 相關匹配法:該方法採用乘法操作;數值越大表明匹配程度越好。

cv_tm_ccoeff 相關係數匹配法:1表示完美的匹配;-1表示最差的匹配。

cv_tm_sqdiff_normed 歸一化平方差匹配法

cv_tm_ccorr_normed 歸一化相關匹配法

cv_tm_ccoeff_normed 歸一化相關係數匹配法

enum ;
cv_exports_w void minmaxloc(inputarray src, cv_out double* minval, cv_out double* maxval=0, cv_out point* minloc=0, cv_out point* maxloc=0, inputarray mask=noarray());
簡要說明:

(1)minmaxloc尋找矩陣src中最小值minval及其位置minloc;最大值maxval及其位置maxloc。

(2)以上引數,若不需要求解,可置為null或者0即可。

(3)引數mask不曉得用法,可以忽略不管。

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...

opencv模板匹配

模板匹配是一種用於在源影象s中尋找定位給定目標影象t 即模板影象 的技術。其原理很簡單,就是通過一些相似度準則來衡量兩個影象塊之間的相似度similarity s,t 2.用途 模板匹配方法常用於一些平面影象處理中,例如印刷中的數字 工業零器件等小尺寸目標影象識別分類。3.方法 模板匹配中,源影象和...

模板匹配opencv

模板匹配,就是在一幅影象中尋找另一幅模板影象最匹配 也就是最相似 的部分的技術。說的有點抽象,下面給個例子說明就很明白了。在上面這幅全明星照中,我們想找出姚明頭像的位置,並把它標記出來,可以做到嗎?可以,這就是模板匹配的要做的事情。其實模板匹配實現的思想也是很簡單很暴力的,就是拿著模板 姚明頭像 在...