python實現模板匹配

2022-06-29 11:54:15 字數 2560 閱讀 9641

目錄:

(一)原理

(二)**實現和幾種常見的模板匹配演算法

正文:(一)原理

在待檢測影象上,從左到右,從上向下計算模板影象與重疊子影象的匹配度,匹配程度越大,兩者相同的可能性越大

作用有侷限性,必須在指定的環境下,才能匹配成功,是受到很多因素的影響,所以有一定的適應性。模板匹配是一種最原始、最基本的模式識別方法,研究某一特定物件物的圖案位於影象的什麼地方,進而識別物件物,這就是乙個匹配問題。它是影象處理中最基本、最常用的匹配方法。模板匹配具有自身的侷限性,主要表現在它只能進行平行移動,若原影象中的匹配目標發生旋轉或大小變化,該演算法無效。模板匹配就是在整個影象區域發現與給定子影象匹配的小塊區域。

(二)**實現和幾種常見的模板匹配演算法

**實現:

1

import

cv2 as cv

2import

numpy as np34

deftemplate_demo():

5 tpl = cv.imread("

./temp.png")

6 target = cv.imread("

./1.png")

7 cv.imshow("

template image

",tpl)

8 cv.imshow("

target image

",target)

9 methods = [cv.tm_sqdiff_normed,cv.tm_ccorr_normed,cv.tm_ccoeff_normed]  #

各種匹配演算法

10 th,tw = tpl.shape[:2]  #

獲取模板影象的高寬

11for md in

methods:

12 result =cv.matchtemplate(target,tpl,md)13#

result是我們各種演算法下匹配後的影象14#

cv.imshow("%s"%md,result)15#

獲取的是每種公式中計算出來的值,每個畫素點都對應乙個值

16 min_val,max_val,min_loc,max_loc =cv.minmaxloc(result)

17if md ==cv.tm_sqdiff_normed:

18 tl = min_loc #

tl是左上角點

19else

:20 tl =max_loc

21 br = (tl[0]+tw,tl[1]+th) #

右下點22 cv.rectangle(target,tl,br,(0,0,255),2)  #

畫矩形,

(0,0,255),2---紅色,線寬

23 cv.imshow("

match-%s

"%md,target)

2425

26 src = cv.imread("

./1.png

") #

讀取27 cv.namedwindow("

input image

",cv.window_autosize) #

建立gui視窗,形式為自適應

28 cv.imshow("

input image

",src) #

通過名字將影象和視窗聯絡

29template_demo()

30 cv.waitkey(0) #

等待使用者操作,裡面等待引數是毫秒,我們填寫0,代表是永遠,等待使用者操作

31 cv.destroyallwindows() #

銷毀所有視窗

幾種常見的模板匹配演算法:

①tm_sqdiff是平方差匹配;tm_sqdiff_normed是標準平方差匹配。利用平方差來進行匹配,最好匹配為0.匹配越差,匹配值越大。

②tm_ccorr是相關性匹配;tm_ccorr_normed是標準相關性匹配。採用模板和影象間的乘法操作,數越大表示匹配程度較高, 0表示最壞的匹配效果。

③tm_ccoeff是相關性係數匹配;tm_ccoeff_normed是標準相關性係數匹配。將模版對其均值的相對值與影象對其均值的相關值進行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示沒有任何相關性(隨機序列)。

相關性是越接近1越大越好

平方差是越小越好

所以tm_sqdiff在使用時和其他的是有所區別的

參考:

實現模板匹配

1 函式 void matchtemplate inputarray image,inputarray templ,outputarray result,int method 引數一 待搜尋影象陣列,且需為8位或者32位浮點型影象 引數二 搜尋模板,有相同的型別,且尺寸不大於輸入影象 引數三 比較結...

python 模板匹配多個物體

參考 匹配多個物體 前面我們是找最大匹配的點,所以只能匹配一次。我們可以設定乙個匹配閾值來匹配多次 1.讀入原圖和模板 2.標準相關模板匹配 res cv2.matchtemplate img gray,template,cv2.tm ccoeff normed threshold 0.8 3.這邊...

opencv實現各種模板匹配方法

include opencv2 highgui highgui.hpp include opencv2 imgproc imgproc.hpp include using namespace std using namespace cv mat img mat templ mat result ch...