- OpenCV Python 教程
- OpenCV Python - 首頁
- OpenCV Python - 概述
- OpenCV Python - 環境配置
- OpenCV Python - 讀取影像
- OpenCV Python - 寫入影像
- OpenCV Python - 使用 Matplotlib
- OpenCV Python - 影像屬性
- OpenCV Python - 位運算
- OpenCV Python - 形狀和文字
- OpenCV Python - 滑鼠事件
- OpenCV Python - 新增軌跡條
- OpenCV Python - 縮放和旋轉
- OpenCV Python - 影像閾值化
- OpenCV Python - 影像濾波
- OpenCV Python - 邊緣檢測
- OpenCV Python - 直方圖
- OpenCV Python - 顏色空間
- OpenCV Python - 影像變換
- OpenCV Python - 影像輪廓
- OpenCV Python - 模板匹配
- OpenCV Python - 影像金字塔
- OpenCV Python - 影像加法
- OpenCV Python - 影像混合
- OpenCV Python - 傅立葉變換
- OpenCV Python - 捕捉影片
- OpenCV Python - 播放影片
- OpenCV Python - 從影片中提取影像
- OpenCV Python - 從影像生成影片
- OpenCV Python - 人臉檢測
- OpenCV Python - 均值漂移/CamShift
- OpenCV Python - 特徵檢測
- OpenCV Python - 特徵匹配
- OpenCV Python - 數字識別
- OpenCV Python 資源
- OpenCV Python - 快速指南
- OpenCV Python - 資源
- OpenCV Python - 討論
OpenCV Python - 模板匹配
模板匹配技術用於檢測影像中一個或多個與樣本或模板影像匹配的區域。
OpenCV 中的cv.matchTemplate()函式用於此目的,其命令如下所示:
cv.matchTemplate(image, templ, method)
其中,image 是要查詢 templ(模板)圖案的輸入影像。method 引數取以下值之一:
- cv.TM_CCOEFF,
- cv.TM_CCOEFF_NORMED, cv.TM_CCORR,
- cv.TM_CCORR_NORMED,
- cv.TM_SQDIFF,
- cv.TM_SQDIFF_NORMED
此方法將模板影像在輸入影像上滑動。這與卷積過程類似,並比較模板和輸入影像在模板影像下的影像塊。
它返回一個灰度影像,其每個畫素表示它與模板的匹配程度。如果輸入影像的大小為 (WxH),模板影像的大小為 (wxh),則輸出影像的大小將為 (W-w+1, H-h+1)。因此,該矩形是模板區域。
示例
在下面的示例中,一張包含印度板球運動員 Virat Kohli 面部的影像被用作模板,以與另一張描繪他和另一位印度板球運動員 M.S.Dhoni 照片的影像進行匹配。
下面的程式使用 80% 的閾值,並在匹配的面部周圍繪製一個矩形:
import cv2
import numpy as np
img = cv2.imread('Dhoni-and-Virat.jpg',1)
cv2.imshow('Original',img)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
template = cv2.imread('virat.jpg',0)
cv2.imshow('Template',template)
w,h = template.shape[0], template.shape[1]
matched = cv2.matchTemplate(gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( matched >= threshold)
for pt in zip(*loc[::-1]):
cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0,255,255), 2)
cv2.imshow('Matched with Template',img)
輸出
原始影像、模板和匹配結果影像如下所示:
原始影像
模板如下所示:
與模板匹配後的影像如下所示:
廣告