opencv模板匹配函数matchtemplate详解

yizhihongxing

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日

相关文章

  • jps不是内部或外部命令 亲测有用

    jps不是内部或外部命令 亲测有用 在使用Java开发时,经常需要查看Java进程的信息,这时就要用到jps命令。但是,有的同学在使用jps时会出现“’jps’ 不是内部或外部命令、可执行的程序或批处理文件”这样的错误提示。这是怎么回事呢? 问题分析 很多同学在安装JDK时,只安装了JRE,而没有安装JDK的bin目录,jps命令就不能使用了。因为jps命令…

    其他 2023年3月29日
    00
  • Golang中interface的基本用法详解

    Golang中interface的基本用法详解 什么是interface interface 是一组需要实现的方法的列表。类似于其他语言中的抽象类,interface 是 Golang 中实现多态的机制之一。具有相同行为特征的实现方法就可以可以实现相同的 interface,相同的 interface 可被相互替换使用。interface 可以理解为是一种规…

    other 2023年6月26日
    00
  • Kotlin开发中open关键字与类名函数名和变量名的使用方法浅析

    Kotlin开发中open关键字与类名函数名和变量名的使用方法浅析 在Kotlin开发过程中,open关键字、类名、函数名和变量名的使用是非常重要的。本文将从三个方面对这些内容进行分别讲解。 open关键字的使用方法 在Kotlin中,open关键字用于修饰类、函数和属性。被修饰的类、函数和属性可以在其他类中继承或复用。其语法格式为: open class …

    other 2023年6月27日
    00
  • 用vbs将名称转换为正确的大小写的代码

    用VBS将名称转换为正确的大小写的代码攻略 以下是一个使用VBS脚本将名称转换为正确大小写的代码的攻略。这个脚本可以帮助你将一个字符串的大小写转换为正确的形式。 步骤1:创建VBS脚本文件 首先,你需要创建一个新的文本文件,并将其保存为.vbs文件扩展名。你可以使用任何文本编辑器来创建这个文件。 步骤2:编写VBS脚本代码 在创建的VBS脚本文件中,输入以下…

    other 2023年8月17日
    00
  • apacherewrite理解

    Apache Rewrite理解的完整攻略 Apache Rewrite是一个强大的模块,可以通过重写URL来控制Web服务器的行为。以下是Apache Rewrite的完整攻略,包含两个示例说明。 概述 Apache Rewrite是一个Apache Web服务器模块,可以通过重写URL来控制Web服务器的行为。它可以将URL重写为其他URL,或者根据UR…

    other 2023年5月9日
    00
  • c++详细讲解构造函数的拷贝流程

    c++详细讲解构造函数的拷贝流程 什么是构造函数 在C++中,构造函数是一种特殊的成员函数,用于创建和初始化对象。当一个对象被创建时,构造函数会自动调用,完成对象的初始化工作。 构造函数的拷贝流程 当需要创建一个新对象并将其初始化为另一个对象的副本时,就需要使用到拷贝构造函数。拷贝构造函数用于实现一个对象复制另一个对象的所有成员变量的功能。 在C++中,每个…

    other 2023年6月26日
    00
  • xmanager5图文使用教程

    Xmanager 5 图文使用教程 Xmanager 5 是一款 Windows 系统下的高级 X 窗口服务器。使用 Xmanager 5 可以在 Windows 系统下远程连接 Linux/Unix 服务器并进行图形化操作,为 Linux/Unix 系统带来了更方便的远程管理方式。本文将为大家介绍 Xmanager 5 的使用方法,包括安装、配置及连接远程…

    其他 2023年3月29日
    00
合作推广
合作推广
分享本页
返回顶部