在本章中,您將學習
如果輸入影象的大小為(wxh)
,而模板影象的大小為(wxh)
,則輸出影象的大小將為(w-w 1,h-h 1)
。得到結果後,可以使用cv.minmaxloc()函式查詢最大/最小值在哪。將其作為矩形的左上角,並以(w,h)
作為矩形的寬度和高度。該矩形是您模板的區域。
注意如果使用cv.tm_sqdiff作為比較方法,則最小值提供最佳匹配。作為示例,我們將在梅西的**中搜尋他的臉。所以我建立了乙個模板,如下所示:
我們將嘗試所有比較方法,以便我們可以看到它們的結果如何:
-1]# 列表中所有的6種比較方法
methods =
['cv.tm_ccoeff'
,'cv.tm_ccoeff_normed'
,'cv.tm_ccorr'
,'cv.tm_ccorr_normed'
,'cv.tm_sqdiff'
,'cv.tm_sqdiff_normed'
]for meth in methods:
img = img2.copy(
) method =
eval
(meth)
# 應用模板匹配
res = cv.matchtemplate(img,template,method)
min_val, max_val, min_loc, max_loc = cv.minmaxloc(res)
# 如果方法是tm_sqdiff或tm_sqdiff_normed,則取最小值
if method in
[cv.tm_sqdiff, cv.tm_sqdiff_normed]
: top_left = min_loc
else
: top_left = max_loc
bottom_right =
(top_left[
0] w, top_left[
1] h)
cv.rectangle(img,top_left, bottom_right,
255,2)
plt.subplot(
121)
,plt.imshow(res,cmap =
'gray'
) plt.title(
'matching result'
), plt.xticks(
), plt.yticks(
) plt.subplot(
122)
,plt.imshow(img,cmap =
'gray'
) plt.title(
'detected point'
), plt.xticks(
), plt.yticks(
) plt.suptitle(meth)
plt.show(
)檢視以下結果:
您會看到,使用cv.tm_ccorr的結果並不理想。
在上一節中,我們在影象中搜尋了梅西的臉,該臉在影象中僅出現一次。假設您正在搜尋具有多次出現的物件,則cv.minmaxloc()不會為您提供所有位置。在這種情況下,我們將使用閾值化。因此,在此示例中,我們將使用著名遊戲mario的螢幕截圖,並在其中找到硬幣。
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img_rgb = cv.imread(
'mario.png'
)img_gray = cv.cvtcolor(img_rgb, cv.color_bgr2gray)
template = cv.imread(
'mario_coin.png',0
)w, h = template.shape[::
-1]res = cv.matchtemplate(img_gray,template,cv.tm_ccoeff_normed)
threshold =
0.8loc = np.where( res >= threshold)
for pt in
zip(
*loc[::
-1])
: cv.rectangle(img_rgb, pt,
(pt[
0] w, pt[
1] h),(
0,0,
255),2
)cv.imwrite(
'res.png'
,img_rgb)
結果:
opencv中文官方文件:
OpenCV python 模板匹配
1,模板匹配的概念及原理 模板匹配是一項在一幅影象中尋找與另一幅模板影象最匹配 相似 部分的技術.我們需要2幅影象 模板 t 將和原影象比照的影象塊 原影象 i 在這幅影象裡,我們希望找到一塊和模板匹配的區域 我們的目標是檢測最匹配的區域 為了確定匹配區域,我們不得不滑動模板影象和原影象進行比較 通...
模板匹配(OpenCV Python)
模板匹配 模板匹配是一種最原始 最基本的模式識別方法,研究某一特定物件物的圖案位於影象的什麼地方,進而識別物件物,這就是乙個匹配問題。它是影象處理中最基本 最常用的匹配方法。模板匹配具有自身的侷限性,主要表現在它只能進行平行移動,若原影象中的匹配目標發生旋轉或大小變化,該演算法無效。工作方法 在待測...
OpenCV Python 核心操作 模板匹配
在opencv裡,模板匹配和卷積原理很像,模板在原影象上從原點開始滑動,計算模板與 影象被模板覆蓋的地方 的差別程度,這個差別程度的計算方法在opencv裡有 6種,然後將每次計算的結果放入乙個矩陣裡,作為結果輸出。假如原圖形是 axb大小,而模板是 axb大小,則輸出結果的矩陣是 a a 1 x ...