翻譯 OpenCV Python教程 模板匹配

2021-09-05 11:35:35 字數 3429 閱讀 5913

⚠️由於自己的拖延症,3.4.3翻到一半,opencv發布了4.0.0了正式版,所以接下來是按照4.0.0翻譯的。

⚠️除了版本之外,其他還是照舊,template matching,附原文。

在本章你會學到:

模板匹配是乙個搜尋並在一張更大的影象中找出模板影象位置的方法。opencv帶有乙個用於此目的的函式cv.matchtemplate()。它簡單的在輸入影象上滑動模板影象(好像做二維卷積那樣)然後比較模板和在模板之下的那一部分輸入影象。opencv裡實現了幾種比較的方法。(你可以看文件來獲取更多細節)。它返回一張灰度影象,每個畫素點的值代表了那個畫素點和它周圍的鄰居組成的影象和模板的相似程度。

如果輸入影象的大小是(wxh)然後模板影象的大小是(wxh),輸出的這張灰度圖大小就是(w-w+1, h-h+1)。一旦你得到了這個結果,你可以用函式cv.minmaxloc()找出結果中最大/最小值。把最大/最小值作為左上角,取高寬(w,h)的矩形,那個矩形就是你(原圖和模板匹配的)的模板區域。

提示

如果你使用cv.tm_sqdiff作為比較(區域與模板匹配度)的方法。最小值是最優匹配(譯者注:所以上一節中提到的是"最大/最小")。

現在,乙個示例。我們會從梅西的**中搜尋出梅西的面部。因此我建立了乙個如下的模板:

我們會嘗試所有的比較方法,如此我們便可以檢視他們的結果,看看都是啥樣的:

看以下結果:

你可以看到使用cv.tm_ccorr的結果並沒有我們想象中那麼好。

在前一部分,我們在影象中尋找梅西的臉,它只在圖中出現了一次。假設你在搜尋的物件會在圖中出現多次,cv.minmaxloc()就無法給你所有的匹配點啦。這時候我們要使用閾值。在下面這個例子中,我們將使用著名遊戲採蘑菇的截圖,並在其中找到硬幣。

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.8

loc = 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-python教程】傅利葉變換

下篇:【翻譯:opencv-python教程】霍夫線性變換

翻譯 OpenCV Python教程 形態變化

這個系列是自己瞎翻的,文法很醜,主要靠意會,跳著跳著撿重要的部分翻,翻錯了不負責,就這樣哈。基於3.4.3,morphological transformations,附原文。在這一章節,形態變換是基於影象形狀的一些簡單操作。它通常在二進位制影象上執行。它需要兩個輸入,乙個是我們的原始影象,第二個是...

OpenCV Python模糊處理

import cv2 as cv import numpy as np 均值模糊 defblur demo img dst cv.blur img,5 5 cv.imshow blur image dst import cv2 as cv import numpy as np 中值模糊 defmed...

OpenCV Python 人臉檢測

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!例項總結 下午的時候,配好了opencv的python環境,opencv的python環境搭建。於是迫不及待的想體驗一下opencv的人臉識別,如下文。haar like百科釋義。通俗的來講,就是作為人臉特徵即可。haar特徵值反映了影象的灰度變化...