OpenCV Python 模板匹配 三十一

2021-10-02 06:26:28 字數 2918 閱讀 7200

在本章中,您將學習

如果輸入影象的大小為(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 ...