opencv模板匹配函数matchtemplate详解

OpenCV是一个流行的计算机视觉库,提供了许多图像处理和计算机视觉算法。其中之一是模板匹配,它可以在图像中查找特定的模式。在本攻略中,我们将介绍OpenCV中的模板匹配函数matchTemplate的细信息。

matchTemplate函数

matchTemplate函数是OpenCV中用于模板匹配的函数。它采用两个参数:源图像和模板像,并返回一个匹配结果图像。该函数将模板图像在源图像中滑动,并计算每个位置的匹配程度。匹配程度越高,结果图像中的像素值越大。

cv2.matchTemplate(image, templ, method[, result[, mask]])

其中,参数说明如下:

  • image:源图像
  • templ:模板图像
  • method:匹配方法,包括cv2.TM_SQDIFF、cv2.TM_SQDIFF_NORMED、cv2.TM_CCORR、cv2.TM_CCORR_NORMED、cv2.TM_CEFF、cv2.TM_CEFF_NORMED
  • result:匹配结果图像
  • mask:掩码图像

示例1:基本模板匹配

import cv2
import numpy as np

# 读取源图像和模板图像
img = cv2.imread('source.jpg')
template = cv2.imread('template.jpg')

# 获取模板图像的宽度和度
w, h = template.shape[:-1]

# 使用cv2.TM_CCOEFF_NORMED方法进行模板匹配
result = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)

# 获取匹配结果中最大值的位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)

# 在源图像中绘制矩形框
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img, top_left, bottom_right, (0, 0, 255), 2)

# 显示结果图像
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

这在源图像中查找模板图像,并在匹配位置绘制矩形框。

示例2:使用掩码进行模板匹配

import cv2
import numpy as np

# 读取源图像和模板图像
img = cv2.imread('.jpg')
template = cv2.imread('template.jpg')

# 创建掩码图
mask = np.zeros(img.shape[:-1], dtype=np.uint8)
mask[100:300, 100:300] = 255

# 使用cv2.TM_CCO_NORMED方法进行模板匹配
result = cv2.matchTemplate(img, template, cv2.TM_CCOEFFORMED, mask=mask)

# 获取匹配结果中最大值的位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)

# 在源图像中绘制矩形框
top_left = max_locbottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img, top_left, bottom_right, (0, 0, 255), 2)

# 显示结果图像
cv2.imshow('result img)
cv2.waitKey()
cv2.destroyAllWindows()

这将在源图像中查找模板图像,并在指定区域内进行匹配。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:opencv模板匹配函数matchtemplate详解 - Python技术站

(0)
上一篇 2023年5月7日
下一篇 2023年5月7日

相关文章

  • Win10创造者更新预览版15014怎么自定位桌面图标自定义位置?

    Win10创造者更新预览版15014中,可以自定义桌面图标的位置。下面我将为大家详细讲解这一过程。 1. 确定图标排列方式 在自定义桌面图标位置之前,我们首先需要确定图标的排列方式。Win10创造者更新预览版15014中,提供了两种排列方式: 在网格中排列 – 默认情况下,在桌面上新建一个文件夹,文件夹内的图标会按照网格排列方式布局。 自由排列 – 在桌面上…

    other 2023年6月25日
    00
  • Java三大特性之封装详解

    Java三大特性之封装详解 在Java中,封装是面向对象编程的三大特性之一。封装是指将数据和方法包装在一个单元中,通过访问修饰符来控制对数据的访问。封装的目的是隐藏内部实现细节,提供对外部的安全访问接口。 封装的优点 封装具有以下几个优点: 数据隐藏:封装可以将数据隐藏在类的内部,只暴露必要的接口给外部使用。这样可以防止外部直接访问和修改数据,保证数据的安全…

    other 2023年8月8日
    00
  • 最长回文子串动态规划

    最长回文子串动态规划 回文串(palindrome)是指从左往右读和从右往做读都一样的字符串。例如,”aba”、”abba”、”babad”都是回文串。 最长回文子串(Longest Palindromic Substring,简称LPS)指的是给定一个字符串,找到其中最长的回文子串。 解法分析 最直接的想法是枚举所有子串并验证是否为回文串,但这个方法会超时…

    其他 2023年3月28日
    00
  • PHP学习记录之数组函数

    PHP学习记录之数组函数攻略 介绍 在PHP中,数组是一种非常重要的数据结构,它可以用来存储和操作一组相关的数据。PHP提供了许多强大的数组函数,可以帮助我们对数组进行各种操作和处理。本攻略将详细介绍一些常用的数组函数及其用法。 1. array_push函数 array_push函数用于将一个或多个元素添加到数组的末尾。它的语法如下: array_push…

    other 2023年8月8日
    00
  • QT+ffmpeg实现视频解析的示例详解

    QT+FFmpeg实现视频解析的示例详解 准备工作 在开始实现视频解析前,需要安装并配置好以下工具和库: QT 5.x:用于GUI界面的设计,QT自带设计工具和信号槽机制,方便灵活。 FFmpeg:一个完整、跨平台、开放源代码的解码器库,支持多种格式的视频封装和编码。 QtAV:基于QT和FFmpeg的音视频播放器,提供简单易用的API以及丰富的功能和良好的…

    other 2023年6月26日
    00
  • win7旗舰版、win8专业版(IE11/ie9/ie10)KB4036586更新补丁下载地址汇总

    Win7旗舰版、Win8专业版(IE11/IE9/IE10)KB4036586更新补丁下载地址汇总攻略 1. 确定操作系统版本和IE版本 首先,我们需要确定你的操作系统版本和IE版本。请按照以下步骤进行操作: 对于Win7旗舰版用户: 打开“开始”菜单,点击“计算机”。 在计算机窗口中,右键点击空白处,选择“属性”。 在属性窗口中,查看“系统类型”字段,确定…

    other 2023年8月4日
    00
  • python3实现UDP协议的服务器和客户端

    下面是“Python3实现UDP协议的服务器和客户端”的完整攻略。 什么是UDP协议 UDP是用户数据报协议(User Datagram Protocol)的缩写,是一种无连接协议,属于OSI模型中的运输层。UDP协议简单、快速,适用于实时性要求较高、数据小、数据丢失后可以容忍的情况下使用。 UDP服务器和客户端的实现 UDP服务器 步骤1:导入模块和创建套…

    other 2023年6月25日
    00
  • C语言指针入门的简单实例教程

    C语言指针是一种非常重要的概念,理解它的含义和原理对于学习C语言程序设计来说非常关键。本篇攻略将通过两个示例详细介绍C语言指针的基本概念和使用方法。 什么是指针 指针是一种变量类型,它可以存储另一个变量的地址。通过指针,我们可以直接对该变量进行操作,而不必使用变量名。指针变量可以像其他变量一样进行定义、初始化和赋值,而实际存储的是内存地址。 指针的声明和定义…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部