1,模板匹配的概念及原理
模板匹配是一項在一幅影象中尋找與另一幅模板影象最匹配(相似)部分的技術.
我們需要2幅影象:
模板 (t): 將和原影象比照的影象塊
原影象 (i): 在這幅影象裡,我們希望找到一塊和模板匹配的區域
我們的目標是檢測最匹配的區域:
為了確定匹配區域, 我們不得不滑動模板影象和原影象進行比較:
通過滑動, 我們的意思是影象塊一次移動乙個畫素 (從左往右,從上往下). 在每乙個位置, 都進行一次度量計算來表明它是 「好」 或 「壞」 地與那個位置匹配 (或者說塊影象和原影象的特定區域有多麼相似)
對於 t 覆蓋在 i 上的每個位置,你把度量值 儲存 到 結果影象矩陣 r中. 在 r 中的每個位置 (x,y) 都包含匹配度量值:
實際上, 我們使用函式 minmaxloc 來定位在矩陣 r 中的最大值點 (或者最小值, 根據函式輸入的匹配引數) .
opencv通過函式 matchtemplate 實現了模板匹配演算法. 可用的方法有6個:
源**:
import cv2 as cv
import numpy as np
def template_demo():
tpl = cv.imread("f:/images/t.png") #模板影象
target = cv.imread("f:/images/i.png")#原影象
cv.imshow("template image", tpl)
cv.imshow("target image", target)
methods = [cv.tm_sqdiff_normed, cv.tm_ccorr_normed, cv.tm_ccoeff_normed] #標準平方差匹配 ,標準相關匹配,標準相關係數匹配
th, tw = tpl.shape[:2] #模板的高寬
for md in methods:
# print(md)
result = cv.matchtemplate(target, tpl, md) #畫素點的相關度量值
min_val, max_val, min_loc, max_loc = cv.minmaxloc(result) #尋找匹配最值(大小和位置)
if md == cv.tm_sqdiff_normed:
tl = min_loc
else:
tl = max_loc
br = (tl[0]+tw, tl[1]+th); #確定匹配區域
cv.rectangle(target, tl, br, (0, 0, 255), 2)#將匹配區域繪製到原圖上
cv.imshow("match-"+np.str(md), target)
# cv.imshow("match-" + np.str(md), result)
src = cv.imread("f:/images/i.png")
cv.namedwindow("input image", cv.window_autosize)
cv.imshow("input image", src)
template_demo()
cv.waitkey(0)
cv.destroyallwindows()
執行結果:
模板匹配(OpenCV Python)
模板匹配 模板匹配是一種最原始 最基本的模式識別方法,研究某一特定物件物的圖案位於影象的什麼地方,進而識別物件物,這就是乙個匹配問題。它是影象處理中最基本 最常用的匹配方法。模板匹配具有自身的侷限性,主要表現在它只能進行平行移動,若原影象中的匹配目標發生旋轉或大小變化,該演算法無效。工作方法 在待測...
OpenCV Python 核心操作 模板匹配
在opencv裡,模板匹配和卷積原理很像,模板在原影象上從原點開始滑動,計算模板與 影象被模板覆蓋的地方 的差別程度,這個差別程度的計算方法在opencv裡有 6種,然後將每次計算的結果放入乙個矩陣裡,作為結果輸出。假如原圖形是 axb大小,而模板是 axb大小,則輸出結果的矩陣是 a a 1 x ...
翻譯 OpenCV Python教程 模板匹配
由於自己的拖延症,3.4.3翻到一半,opencv發布了4.0.0了正式版,所以接下來是按照4.0.0翻譯的。除了版本之外,其他還是照舊,template matching,附原文。在本章你會學到 模板匹配是乙個搜尋並在一張更大的影象中找出模板影象位置的方法。opencv帶有乙個用於此目的的函式cv...