python opencv 模板匹配

2022-06-10 15:39:10 字數 3140 閱讀 7245

在本章中,您將學習 - 使用模板匹配在影象中查詢物件 - 你將看到以下功能:cv.matchtemplate(),cv.minmaxloc()

如果輸入影象的大小為(wxh),而模板影象的大小為(wxh),則輸出影象的大小將為(w-w + 1,h-h + 1)。得到結果後,可以使用**cv.minmaxloc**()函式查詢最大/最小值在哪。將其作為矩形的左上角,並以(w,h)作為矩形的寬度和高度。該矩形是您模板的區域。

注意如果使用**cv.tm_sqdiff**作為比較方法,則最小值提供最佳匹配。

作為示例,我們將在梅西的**中搜尋他的臉。所以我建立了乙個模板,如下所示:我們將嘗試所有比較方法,以便我們可以看到它們的結果如何:

import

cv2 as cv

import

numpy as np

from matplotlib import

pyplot as plt

img = cv.imread('

梅西.jpg

',0)

img2 =img.copy()

template = cv.imread('

模板.jpg

',0)

w, h = template.shape[::-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,則取最小值

您會看到,使用**cv.tm_ccorr**的結果並不理想。

在上一節中,我們在影象中搜尋了梅西的臉,該臉在影象中僅出現一次。假設您正在搜尋具有多次出現的物件,則**cv.minmaxloc**()不會為您提供所有位置。在這種情況下,我們將使用閾值化。因此,在此示例中,我們將使用著名遊戲**mario**的螢幕截圖,並在其中找到硬幣。

參考:

Python OpenCV之模板匹配

模板匹配 模板匹配和卷積原理很像,模板在原影象上從原點開始滑動,計算模板與當前圖形被模板覆蓋的地方的差別程度,然後將每次計算的結果放入乙個矩陣,作為結果輸出。假如原圖形是a b大小,而模板是a b大小,則輸出結果的矩陣是 a a 1 b b 1 用於搜尋的輸入影象 template 用於匹配的模板 ...

Python OpenCV學習(7) 模板匹配

利用python學習opencv,個人感覺比較方便。函式的形式與c 基本相同,所以切換過來還是比較好的,對於像我這種對python不太熟練的人,使用python的整合開發環境pycharm進行學習,可以設定斷點除錯,有助於我這類初學者理解掌握。下面是利用python語言結合opencv的模板匹配 6...

python opencv 安裝整理

這兩天比較有空,在公司內想學習一下opencv,又不想安裝vc 所以就那個python看opencv。安裝環境本來很簡單 但是我python是64的 估計也很多 而opencv的安裝要有乙個numpy庫 這個在官網上只有32位的 所以,事情變得複雜起來。網上找了一下,只道有提供64位版的numpy庫...