資料型別不匹配 CV學習筆記(十一) 模板匹配

2021-10-14 19:50:25 字數 2906 閱讀 7886

在這一篇文章中,我們將會了解數字影象處理中重要的組成部分之一的模板匹配。

一:什麼是模板匹配?

在opencv教程中這樣解釋模板匹配:

模板匹配是一項在一幅影象中尋找與另一幅模板影象最匹配(相似)部分的技術.

這裡說的模板是我們已知的小影象,模板匹配就是在一副大影象中搜尋目標。模板就是我們已知的在圖中要找的目標,且該目標同模板有相同的尺寸、方向和影象,通過一定的演算法可以在圖中找到目標,確定其座標位置。

二:模板匹配的原理

用通俗的語言來解釋模板的匹配原理:

在要檢測的影象上,從左到右,從上到下遍歷這一幅影象,從上到下計算模板與重疊子影象的畫素匹配度,如果匹配的程度越大,這說明相同的可能性越大。

實現過程:

①:準備兩幅影象:

影象 (i): 在這幅影象裡,我們希望找到一塊和模板匹配的區域

模板 (t): 將和原影象比照的影象塊

②:為了確定匹配區域, 我們滑動模板影象和原影象進行比較

③:使用模板遍歷影象

通過滑動, 從左往右,從上往下. 在每乙個位置, 都進行一次度量計算來表明模板和原影象的特定區域的相似性。

對於t覆蓋在i上的每個位置,你把度量值儲存到結果影象矩陣(r)中. 在r中的每個位置(x,y)都包含匹配度量值:

上圖是使用標準相關匹配方法處理後的結果影象r. 最白的位置代表最高的匹配. 紅色橢圓框住的位置很可能是結果影象矩陣中的最大數值, 所以這個區域被認為是匹配的.

三:使用opencv實現

我們呼叫opencv中的函式matchtemplate實現了模板匹配演算法:

①:平方差匹配 method=cv_tm_sqdiff

這類方法利用平方差來進行匹配,最好匹配為0.匹配越差,匹配值越大.

②:標準平方差匹配 method=cv_tm_sqdiff_normed

③:相關匹配 method=cv_tm_ccorr

這類方法採用模板和影象間的乘法操作,所以較大的數表示匹配程度較高,0標識最壞的匹配效果.

⑤:相關匹配 method=cv_tm_ccoeff

這類方法將模版對其均值的相對值與影象對其均值的相關值進行匹配,1表示完美匹配,-1表示匹配很差,0表示沒有任何相關性(隨機序列).

在這裡**實現:

在這次匹配中我們主要使用了matchtemplate和minmaxloc這兩個函式:

matchtemplate:函式的完整表達:

matchtemplate(image, templ, method[, result[, mask]])image:引數表示待搜尋源影象,必須是8位整數或32位浮點。templ:引數表示模板影象,必須不大於源影象並具有相同的資料型別。method:引數表示計算匹配程度的方法。result:引數表示匹配結果影象,必須是單通道32位浮點。如果image的尺寸為w x h,templ的尺寸為w x h,則result的尺寸為(w-w+1)x(h-h+1)。

minmaxloc函式的完整表達:

minmaxloc(src[, mask],minval, maxval, minloc, maxloc)src引數表示輸入單通道影象。mask引數表示用於選擇子陣列的可選掩碼。minval引數表示返回的最小值,如果不需要,則使用null。maxval引數表示返回的最大值,如果不需要,則使用null。minloc引數表示返回的最小位置的指標(在2d情況下); 如果不需要,則使用null。maxloc引數表示返回的最大位置的指標(在2d情況下); 如果不需要,則使用null。

四:實現結果:效果如下:五:參考文獻

:opencv documentation

模板匹配 - opencv 2.3.2 documentation​www.opencv.org.cn

csdn-專業it技術社群-登入​blog.csdn.net

csdn-專業it技術社群-登入​blog.csdn.net

IOS swift資料型別不匹配問題

swift的資料運算使用起來感覺比oc要嚴格,oc有時候即使型別不同也可以直接運算,swift則會報錯.例如 let circleview y self.view.center.y cgfloat screen width 0.1 oc screen width 0.1這裡是不用強轉型別的 又如 c...

AQL學習筆記(十一) AQL基礎 資料型別

aql支援原始資料型別和復合資料型別。原始資料型別 null,bool,number,string utf 8 復合資料型別 array,object document 1 原始資料型別 數值資料採用64位雙精度型別,字串需要用雙引號或者單引號括起來。2 復合資料型別 陣列型別用 表示,裡面每個元素...

學習筆記 Python 資料型別

資料型別 classinfo 基礎資料型別 資料型別 備註示例 number 數字 python支援四種不同的數字型別 int 有符號整型 long 長整型 也可以代表八進位制和十六進製制 float 浮點型 complex 複數 a 1string 字串 使用引號,包括str和basestring...