opencv模板匹配

2021-10-23 13:43:46 字數 1992 閱讀 3094

模板匹配是通過模板在採集到的原影象進行滑動尋找與模板影象相似的目標。模板匹配不是基於直方圖的方式,而是基於影象的灰度匹配。

6種匹配度量方法:

平方差匹配法cv_tm_sqdiff

歸一化平方差匹配法cv_tm_sqdiff_normed

相關匹配法cv_tm_ccorr

歸一化相關匹配法cv_tm_ccorr_normed

係數匹配法cv_tm_ccoeff

化相關係數匹配法cv_tmccoeff_normed

方差匹配方法:完全匹配會得到1, 完全不匹配會得到0。

歸一化方差匹配方法:完全匹配結果為0。

相關性匹配方法:完全匹配會得到很大值,不匹配會得到乙個很小值或0。

歸一化的互相關匹配方法:完全匹配會得到1, 完全不匹配會得到0。

相關係數匹配方法:完全匹配會得到乙個很大值,完全不匹配會得到0,完全負相關會得到很大的負數。

歸一化的相關係數匹配方法:完全匹配會得到1,完全負相關匹配會得到-1,完全不匹配會得到0。

關於函式中result矩陣的含義,這篇文章有總結,有疑問的可以看一看:

cvmatchtemplate中的引數"result"的幾點說明

框選出模板後,按下回車鍵即可

int

main()

int match_method =0;

//選取平方差匹配法

matchtemplate

(frame, refmat, resultmat, match_method)

;normalize

(resultmat, resultmat,0,

1,norm_minmax,-1

,mat()

);//歸一化

double minval;

double maxval; point minloc; point maxloc; point matchloc;

//定義最大值最小值以及它們的位置變數

minmaxloc

(resultmat,

&minval,

&maxval,

&minloc,

&maxloc,

mat())

;//從結果矩陣中找到匹配度最大以及最小的值並且確定其位置

//對於方法sqdiff和sqdiff_normed兩種方法來講,越小的值就有著更高的匹配結果

//而其餘的方法則是數值越大匹配效果越好

if(match_method == tm_sqdiff || match_method == tm_sqdiff_normed)

matchloc = minloc;

else

matchloc = maxloc;

frame.

copyto

(dispmat)

;//以最佳匹配點為中心繪製與模板相同大小的框

rectangle

(dispmat, matchloc,

point

(matchloc.x + refmat.cols, matchloc.y + refmat.rows)

, scalar:

:all(0

),2,

8,0)

; cnt++

;imshow

("template"

,refmat)

;imshow

("dispmat"

,dispmat)

;waitkey(30

);}return0;

}

這並不是演示**的展示效果,但是差不多意思。

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

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