在本章中,您將學習 - 使用模板匹配在影象中查詢物件 - 你將看到以下功能:cv.matchtemplate(),cv.minmaxloc()
如果輸入影象的大小為(wxh)
,而模板影象的大小為(wxh)
,則輸出影象的大小將為(w-w + 1,h-h + 1)
。得到結果後,可以使用**cv.minmaxloc**()函式查詢最大/最小值在哪。將其作為矩形的左上角,並以(w,h)
作為矩形的寬度和高度。該矩形是您模板的區域。
注意如果使用**cv.tm_sqdiff**作為比較方法,則最小值提供最佳匹配。作為示例,我們將在梅西的**中搜尋他的臉。所以我建立了乙個模板,如下所示:我們將嘗試所有比較方法,以便我們可以看到它們的結果如何:
importcv2 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庫...