- 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)
输出
原始图像、模板和匹配结果图像如下所示:
原始图像
模板如下所示:
与模板匹配后的图像如下所示:
广告