iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python OpenCV怎么实现图像模板匹配
  • 202
分享到

Python OpenCV怎么实现图像模板匹配

2023-06-29 21:06:17 202人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

今天小编给大家分享一下python OpenCV怎么实现图像模板匹配的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

今天小编给大家分享一下python OpenCV怎么实现图像模板匹配的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1.什么是模板匹配及模板匹配方法matchTemplate()

介绍

提供一个模板图像,一个目标图像,且满足模板图像是目标图像的一部分,从目标图像中寻找特定的模板图像的过程,即为模板匹配。OpenCV提供了matchTemplate()方法帮助我们实现模板匹配。

该方法语法如下:

cv2.matchTemplate(image, templ, method, result=None, mask=None)

其中

image 即目标图像

templ 即模板图像

method 是匹配的方式

mask 即掩模,可选。只有当method为cv2.TM_SQDIFF或cv2.TM_CCORR_NORMED时才支持此参数。

method参数可以是以下值:

参数值描述
cv2.TM_SQDIFF差值平方和匹配,也称平方差匹配。可以理解为是基于差异程度的匹配,差异程度越小,匹配程度越高。完全匹配时值差值平方和为0。
cv2.TM_SQDIFF_NORMED相关匹配。 可以理解为是基于相似程度的匹配,相似程度越高,计算结果越大,匹配程度就越高。
cv2.TM_CCORR标准相关匹配。 规则同上。
cv2.TM_CCORR_NORMED相关系数匹配
cv2.TM_CCOEFF相关系数匹配。也是基于相似程度的匹配,计算结果是一个-1到1的浮点数,1表示完全匹配,0表示毫无关系,-1表示两张图片亮度刚好相反。
cv2.TM_CCOEFF_NORMED标准相关系数匹配,规则同上。

使用matchTemplate()方法,模板会将图像中的每一块区域都覆盖一遍,并每次都使用所选的method方法进行计算,每次的计算结果最后以一个二维数组的形式返回给我们。

素材准备

为方便展示,特准备以下图片素材:

选择世界名画《三英战吕布》(test.png),图像shape为(738, 675, 3):

Python OpenCV怎么实现图像模板匹配

从中抠出一部分图像元素作为下边要用的模板素材。取材代码如下( 不建议截图,截图抠出来的不一定能保证尺寸):

import cv2img = cv2.imread("test.png")print(img.shape)# 电灯img1 = img[20:220, 320:480, :]# 虎牢关牌匾img2 = img[75:150, 200:310, :]# 青龙刀img3 = img[170:530, 575:650, :]# 关云长img4 = img[270:670, 160:330, :]cv2.imshow("img0", img)cv2.imshow("img1", img1)cv2.imshow("img2", img2)cv2.imshow("img3", img3)cv2.imshow("img4", img4)cv2.waiTKEy()cv2.destroyAllwindows()cv2.imwrite('template_pic1.jpg', img1)cv2.imwrite('template_pic2.jpg', img2)cv2.imwrite('template_pic3.jpg', img3)cv2.imwrite('template_pic4.jpg', img4)

取出的模板素材如下:

电灯

Python OpenCV怎么实现图像模板匹配

虎牢关牌匾

Python OpenCV怎么实现图像模板匹配

青龙刀

Python OpenCV怎么实现图像模板匹配

关云长

Python OpenCV怎么实现图像模板匹配

2.单模板匹配

单模板匹配,即在匹配时中只使用到一个模板的匹配过程。具体又可以分为单目标匹配和多目标匹配。

2.1 单目标匹配

单目标匹配,即模板在目标图像中只匹配 匹配程度最高的一个匹配结果。

这需要找出这一次匹配结果所在位置的坐标来确定其位置,

OpenCV提供了cv2.minMAXLoc()来实现。

该方法参数为matchTemplate()的返回值,会返回一个元组,元组中有四个值,分别是最小值、最大值、最小值时图像左上角顶点坐标,最大值时图像左上角顶点坐标。

接下来,使用 电灯(template_pic1) 图片来匹配原图,并用红色的矩形在原图像中圈出模板图像,使用标准差值平方和的匹配方式,代码如下:

import cv2img = cv2.imread("test.png")templ = cv2.imread("template_pic1.jpg")height, width, c = templ.shaperesults = cv2.matchTemplate(img, templ, cv2.TM_SQDIFF_NORMED)# 获取匹配结果中的最小值、最大值、最小值坐标和最大值坐标minValue, maxValue, minLoc, maxLoc = cv2.minMaxLoc(results)resultPoint1 = minLocresultPoint2 = (resultPoint1[0] + width, resultPoint1[1] + height)cv2.rectangle(img, resultPoint1, resultPoint2, (0, 0, 255), 2)cv2.imshow("img", img)cv2.waitKey()cv2.destroyAllWindows()

如图所示,成功标出了模板图。

Python OpenCV怎么实现图像模板匹配

如果要从多幅图像中,找出与模板最匹配的结果,

以标准差值平方和的匹配方式为例,
则可以对这些图像进行遍历,并比较每幅图像对应结果中的最小值,找出最小值中的最小值,则为最佳匹配项。

以两幅图像为例,将原图翻转一次,生成一张新的图像(翻转后结果与原图较像,但差异巨大)

翻转产生素材(test1.png)

import cv2img = cv2.imread("test.png")dst1 = cv2.flip(img, 1)cv2.imshow("dst1", dst1)cv2.waitKey()cv2.destroyAllWindows()cv2.imwrite('test1.png', dst1)        

Python OpenCV怎么实现图像模板匹配

然后使用模板 关云长 (template_pic4.jpg)对两幅图像进行匹配,输出最佳匹配结果,并画红框展示:

import cv2image = []image.append(cv2.imread("test.png"))image.append(cv2.imread("test1.png"))templ = cv2.imread("template_pic4.jpg")height, width, c = templ.shape# 循环变量初始化# 这里只是随便设定一个值,该值并无意义,只是为了定义该变量# 使用TM_SQDIFF_NORMED计算方法,计算出的结果通常是小于1的,所以minValue可以设置为1。如果是TM_SQDIFF计算方法,则就不行了,计算出来的值会很大。代码就不再有效,需要把minMax设得更大,或者做其他修改。index = -1minValue = 1minLoc1 = (0, 0)# 遍历每幅图像for i in range(0, len(image)):    results = cv2.matchTemplate(image[i], templ, cv2.TM_SQDIFF_NORMED)    min = cv2.minMaxLoc(results)[0]    if min < minValue:        minValue = min        minLoc1 = cv2.minMaxLoc(results)[2]        index = iminLoc2 = (minLoc1[0] + width, minLoc1[1] + height)cv2.rectangle(image[index], minLoc1, minLoc2, (0, 0, 255), 2)cv2.imshow("result", image[index])cv2.waitKey()cv2.destroyAllWindows()

如图,test.png中的关云长与模板更为匹配。

Python OpenCV怎么实现图像模板匹配

2.2 多目标匹配

多目标匹配,即在目标图像中匹配出所有与模板图像匹配的结果。可以使用相关匹配或相关系数匹配。

素材准备

还以原图像"test.png"为参照,

为了产生方便我们做示例的图像,我们在该图像的基础上多加一盏电灯,生成"test2.png"

import cv2img = cv2.imread("test.png")templ = cv2.imread("template_pic1.jpg")img[20:220, 30:190, :] = templcv2.imshow("img", img)cv2.waitKey()cv2.destroyAllWindows()cv2.imwrite('test2.png', img)      

Python OpenCV怎么实现图像模板匹配

多目标匹配

多目标匹配即对matchTemplate()匹配的总的结果,的计算情况数据,使用for循环遍历,并设定一个判断标准。

如使用标准相关系数(cv2.TM_CCOEFF_NORMED)的方法判断,如:如果计算值大于0.99,则我们认为匹配成功了。

使用电灯模板"template_pic1.jpg",匹配图像test2.png。并对匹配的结果用红色的矩形框标记。

代码示例如下:

import cv2img = cv2.imread("test2.png")templ = cv2.imread("template_pic1.jpg")height, width, c = templ.shape# 按照标准相关系数匹配results = cv2.matchTemplate(img, templ, cv2.TM_CCOEFF_NORMED)for y in range(len(results)):    for x in range(len(results[y])):        if results[y][x] > 0.99:            cv2.rectangle(img, (x, y), (x + width, y + height), (0, 0, 255), 2)cv2.imshow("img", img)cv2.waitKey()cv2.destroyAllWindows()

程序执行结果如下,成功匹配出了两盏灯。

Python OpenCV怎么实现图像模板匹配

3.多模板匹配

多模板匹配,即进行了n次单模板的匹配过程。&emsp;

直接上示例:

在test.png中匹配电灯、青龙刀、虎牢关牌匾、关云长四个图像模板:

import cv2def myMatchTemplate(img, templ):    height, width, c = templ.shape    results = cv2.matchTemplate(img, templ, cv2.TM_CCOEFF_NORMED)    loc = list()    for i in range(len(results)):        for j in range(len(results[i])):            if results[i][j] > 0.99:                loc.append((j, i, j + width, i + height))    return loC# 读取原始图像img = cv2.imread("test.png")  # 模板列表templs = list()  templs.append(cv2.imread("template_pic1.jpg"))templs.append(cv2.imread("template_pic2.jpg"))templs.append(cv2.imread("template_pic3.jpg"))templs.append(cv2.imread("template_pic4.jpg"))loc = list()  for t in templs:     loc += myMatchTemplate(img, t) # 遍历所有红框的坐标for i in loc:      cv2.rectangle(img, (i[0], i[1]), (i[2], i[3]), (0, 0, 255), 2) cv2.imshow("img", img) cv2.waitKey() cv2.destroyAllWindows()

匹配效果如下:

Python OpenCV怎么实现图像模板匹配

以上就是“Python OpenCV怎么实现图像模板匹配”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网Python频道。

--结束END--

本文标题: Python OpenCV怎么实现图像模板匹配

本文链接: https://www.lsjlt.com/news/326459.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python OpenCV怎么实现图像模板匹配
    今天小编给大家分享一下Python OpenCV怎么实现图像模板匹配的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2023-06-29
  • Python+Opencv实现图像匹配功能(模板匹配)
    本文实例为大家分享了Python+Opencv实现图像匹配功能的具体代码,供大家参考,具体内容如下 1、原理 简单来说,模板匹配就是拿一个模板(图片)在目标图片上依次滑动,每次计算模...
    99+
    2022-11-12
  • Python+Opencv实现图像模板匹配详解
    目录引言一、匹配方法 二、匹配单个对象 三、匹配多个对象引言 什么是模板匹配呢? 看到这里大家是否会觉得很熟悉的感觉涌上心头!在人脸识别是不是也会看见&...
    99+
    2022-11-11
  • OpenCV-Python实现多模板匹配
    目录多模板匹配获取匹配位置的集合循环在循环中使用zip()替换坐标实战多模板匹配实例:基于opencv的多目标模板匹配模板匹配的作用在图像识别领域作用可大了。那什么是模板匹配? 模板...
    99+
    2022-11-12
  • Opencv Python实现两幅图像匹配
    本文实例为大家分享了Opencv Python实现两幅图像匹配的具体代码,供大家参考,具体内容如下 原图 import cv2 img1 = cv2.imread('SURF_2.jpg', cv2.IMRE...
    99+
    2022-06-02
    opencv python 图像匹配
  • OpenCV-Python如何实现多模板匹配
    小编给大家分享一下OpenCV-Python如何实现多模板匹配,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!多模板匹配在上一篇的实战中,我们通过人物眼睛的子图,找...
    99+
    2023-06-15
  • PythonOpenCV实现图像模板匹配详解
    目录1.什么是模板匹配及模板匹配方法matchTemplate()介绍素材准备2.单模板匹配2.1 单目标匹配2.2 多目标匹配3.多模板匹配1.什么是模板匹配及模板匹配方法matc...
    99+
    2022-11-10
  • python中opencv图像金字塔轮廓及模板匹配是怎样的
    这篇文章给大家介绍python中opencv图像金字塔轮廓及模板匹配是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.图像金字塔①高斯金字塔向下采样,数据会越来越少,减少的方式是:将偶数行和列删除向上采样,数据...
    99+
    2023-06-25
  • opencv-python图像配准(匹配和叠加)的实现
    图像配准需是指对不同条件下得到的两幅或多幅图像进行匹配、叠加的过程。最简单的做法就是求得原图像到目标图像之间的透视变换矩阵,将原图像按照矩阵进行变换,就可以得到和目标图像相似的效果。...
    99+
    2022-11-12
  • OpenCV-Python模板匹配人眼的实例
    目录什么是模板匹配模板匹配函数实现模板匹配什么是模板匹配 模板匹配是指在当前图像A内寻找与图像B最相似的部分,可以理解找茬,但是这里是找出一样的信息。 一般我们将图像A称为输入图像,...
    99+
    2022-11-12
  • opencv C++模板匹配的简单实现
    目录一简单实现二函数及原理讲解1matchTemplate()参数详解2minMaxLoc()函数一 简单实现 #include <opencv2/opencv.hpp>...
    99+
    2022-11-13
  • opencv C++模板匹配的实现方法
    这篇文章主要介绍“opencv C++模板匹配的实现方法”,在日常操作中,相信很多人在opencv C++模板匹配的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”opencv&nb...
    99+
    2023-06-29
  • python计算机视觉opencv图像金字塔轮廓及模板匹配
    目录1.图像金字塔①高斯金字塔②拉普拉斯金字塔2.图像轮廓①寻找轮廓②轮廓特征③轮廓绘制3.模板匹配①模板匹配②匹配框线绘制③多对象匹配4.直方图统计①直方图绘制②直方图统计③直方图...
    99+
    2022-11-12
  • Python和OpenCV进行多尺度模板匹配实现
    目录1. 效果图2. 原理3. 步骤4. 源码5. 参考这篇博文将实现如何将标准模板匹配扩展到多尺度,从而使其更加健壮。使其可以处理模板和输入图像大小不同的匹配。 1. 效果图 模板...
    99+
    2022-11-12
  • python OpenCV实现图像特征匹配示例详解
    目录目标Brute-Force匹配器的基础使用ORB描述符进行Brute-Force匹配什么是Matcher对象?带有SIFT描述符和比例测试的Brute-Force匹配基于匹配器的...
    99+
    2023-05-17
    python OpenCV图像特征匹配 python OpenCV
  • python基于OpenCV模板匹配识别图片中的数字
    目录前言程序目标思路讲解代码讲解完整代码总结前言 本博客主要实现利用OpenCV的模板匹配识别图像中的数字,然后把识别出来的数字输出到txt文件中,如果识别失败则输出“读取失败”。...
    99+
    2022-11-12
  • python如何基于OpenCV模板匹配识别图片中的数字
    小编给大家分享一下python如何基于OpenCV模板匹配识别图片中的数字,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!程序目标单个数字模板:(这些单个模板是我自...
    99+
    2023-06-14
  • python opencv图像旋转怎么实现
    要在Python中使用OpenCV实现图像旋转,可以使用OpenCV中的getRotationMatrix2D和warpAffine...
    99+
    2023-10-21
    python
  • Python中OpenCV图像平移怎么实现
    小编给大家分享一下Python中OpenCV图像平移怎么实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!每次学习新东西的时候,橡皮擦都是去海量检索,然后找到适合...
    99+
    2023-06-15
  • Python+FuzzyWuzzy怎么实现模糊匹配
    今天小编给大家分享一下Python+FuzzyWuzzy怎么实现模糊匹配的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. ...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作