利用OpenCV的函数matchTemplate()实现在图像中寻找、检索、搜索模板图像【图像模板匹配】

利用OpenCV的函数matchTemplate()实现在图像中寻找、检索、搜索模板图像【图像模板匹配】

在博文 https://www.hhai.cc/thread-220-1-1.html 中我们利用直方图的反向投影原理可以寻找图像中具有某个直方图特征的部分。
但是有时候会遇到这样的情况:图像中某个部分的直方图与某个特征的直方图相同,但内容却完全不一样,这个时候我们通过直方图的反向投影原理找到的部分就不是我们希望找到的。
在这种情况下,我们可以通过直接比较图像的像素值来检索是否原图中与模板图像存在相同内容,这种通过比较像素值来寻找相同内容的方法叫作图像模板匹配。

OpenCV提供了函数matchTemplate()来实现图像模板匹配。
具体实现方法如下:
①在待匹配图像中选取与模板图像尺寸相同的滑动窗口,将模板图像的左上角作为锚点(关于滑动窗口锚点的概念,可以参考博文 https://www.hhai.cc/thread-177-1-1.html),然后去按某种模板匹配算法计算匹配程度值,这个值就作为锚点对应于原图中的匹配程度值,并计录在输出矩阵“result”中。
②窗口滑动顺序为从左上角开始向右滑动,滑动到最右边后向下滑动一行,然后从最左侧重新开始滑动。
设原图像的尺寸为W×H,模板图像的尺寸为w×h,则基于这样的滑动顺序、锚点的选择、以及模板图像本来有一定的宽度和高度,显然匹配程度值记录矩阵“result”的尺寸只需要(W-w+1)×(H-h+1)就可以了。有些朋友可能会问,真的是显然么?我怎么不觉得是显然呢?如果您觉得不是显然,那么您自己举个简单的例子在草稿纸上模拟下滑动过程就很容易明白了哈。如果实在是搞不明白,可以找昊虹君有偿咨询哈。

函数matchTemplate()的原型如下:

void cv::matchTemplate(InputArray image,InputArray templ,OutputArray result,int method,InputArray mask = noArray() )
result=cv.matchTemplate(image, templ, method[, result[, mask]])

参数意义如下:
image—待匹配模板的原图像。

templ—模板图像。

method—模板匹配时需要计算窗口覆盖区域与原图的匹配程度,可以用不同的方法,不同的方法对应于method不同的以值。各取值对应的计算式如下表所示:
在这里插入图片描述
在这里插入图片描述
result—模板匹配结果矩阵,这里面每一个点的值代表原图中某一点与锚点对齐时,用参数method选取的匹配程度计算方法所计算出的匹配程度值。设原图像的尺寸为W×H,模板图像的尺寸为w×h,则输出矩阵“result”的尺寸为(W-w+1)×(H-h+1),具体为什么是这个尺寸,我在上面的叙述中已经解释了这个问题。

mask—模板图像的掩码矩阵。它必须具有与templ具有相同的尺寸。它要么与模板图像具有相同数量的通道数,要么只有一个通道。如果数据类型为CV_8U,则掩码被解释为二进制掩码,这意味着仅使用掩码为非零的元素参与计算,并且与实际掩码值无关(权重等于1)。如果数据类型为 CV_32F,掩码值用作权重。

附函数matchTemplate()的Python示例代码:

# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术# OpenCV的版本为4.4.0# -*- coding:utf-8 -*-
import cv2 as cv
import sysif __name__ == '__main__':# 读取图像并判断是否读取成功image = cv.imread('E:/material/images/histogram_back_projection/lml-02.jpg')template = cv.imread('E:/material/images/histogram_back_projection/lml-template.jpg')if image is None or template is None:print('Failed to read matchTemplate.jpg or match_template.jpg.')sys.exit()cv.imshow('image', image)cv.imshow('template', template)# 计算模板图片的高和宽h, w = template.shape[:2]# 进行图像模式匹配result = cv.matchTemplate(image, template, method=cv.TM_CCOEFF_NORMED)min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result)# 计算图像左上角、右下角坐标并画出匹配位置left_top = max_locright_bottom = (left_top[0] + w, left_top[1] + h)cv.rectangle(image, left_top, right_bottom, 255, 2)cv.imshow('Matching results', image)cv.waitKey(0)cv.destroyAllWindows()

代码运行结果如下:
在这里插入图片描述
在这里插入图片描述
从上面的运行结果可以看出,我们在原图中找到了待匹配图像,并且把它标注了出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18292.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python以图搜图:如何用Python优化SEO?

Python以图搜图:如何用Python优化SEO? 随着搜索引擎算法的普及,优化您的SEO策略需要更多的创意和技巧。一种方法是使用Python以图搜图,具有该技能可以使您的网站上升到搜索结果列表的顶部。在这篇文章中,我们将探讨Py…

使用Milvus搭建以图搜图服务

使用Milvus搭建以图搜图服务 介绍安装MilvusJava调用Milvus插入、查询引入Maven依赖创建Milvus客户端实现Milvus插入向量数据实现Milvus 查询向量 结尾 介绍 网上相关的实现比较少,最多也只能查到Milvus,但不知道怎么使用。最后通过ChatGPT了解到了相关…

chatgpt赋能python:Python在SEO中的应用之以图找图

Python在SEO中的应用之以图找图 在SEO优化中,一个重要的环节是优化图片,而通过利用Python编写的代码,可以实现以图搜图,简化了图片优化的流程和提高了优化效率。 什么是以图找图 以图搜图,即通过一张已知图片搜索出…

自研芯片架构 ,这家中国公司发布DPU芯片计划

近日,专注于智能计算领域的DPU芯片和解决方案公司中科驭数发布了其下一代DPU芯片计划,将基于自研的KPU(Kernel Processing Unit)芯片架构,围绕网络协议处理、数据库和大数据处理加速、存储运算、安全加密运算等核心功能&#xff0…

十大芯片公司盘点,转行怎么选择芯片设计公司?

不少同学想要入行IC,想要了解IC行业哪些公司比较有前景?芯片设计公司哪家强?下面IC修真院就来为大家盘点一下! 中国十大芯片企业排名 1.海思Hisilicon 2.Spreadtrum展讯 3.龙芯loongson 4.兆易创新GigaDevice 5.汇顶GOODIX 6.华大…

全球爆火的ChatGPT,能否推动芯片市场增长?

“我所热爱的是我真实的生活,因为它包含了我所有的经历和感受,是我每一天都在体验和思考的。”这句非常有诗意的话,来自最近爆火的ChatGPT。 ChatGPT作为一款智能机器人,上知天文下知地理,不仅能写文案,还…

拿走!H5版本ChatGPT开源等你

近些日子忙里偷闲的研究chatGPT,也小弄了一个公众号版本,一个H5版本的,现在H5版本的也就是开放给大家体验的版本,还不知道的伙伴可以关注#公众号:李连活,回复“888”领取体验,和AI畅快聊天问答。…

ChatGPT分销版如何接入文心一言(文心千帆)?

对于ChatGPT分销版的对话通道接入还是比较简单的,为什么这么久才接入? 其实很久之前我们就在申请接入百度的文心一言(文心千帆),但是最之前的条件确实太苛刻了,需要签订各种协议以及缴纳各种费用&#xff0…

GPT-4震撼发布:多模态大模型,直接升级ChatGPT、必应,开放API,游戏终结了?...

ChatGPT 点燃了科技行业的明灯,GPT-4 能燎原吗? 谁能革得了 ChatGPT 的命?现在看来还是 OpenAI 自己。 在 ChatGPT 引爆科技领域之后,人们一直在讨论 AI「下一步」的发展会是什么,很多学者都提到了多模态,我…

(抛砖引玉)用好chatgpt小帮手,写一个实验室管理系统

本文用实际案例描述了如何用好chatgpt做一些小程序,主要是写给缺乏实际编程经验但又不得不硬着头皮上的同学。 大佬们可以直接飘过~ 目前兼着实验室管理员的工作,众做周知,电子工程师的实验室一般来说都是杂乱无章的,没有设备维护…

GPT发展史

不知道大家是否还记得年初刷屏的 DALLE2 ?因为它的爆火,大家开始不约而同的讨论起 AI 绘画会不会代替设计师的工作,这个话题至今还被人常常提起。最近,OpenAI 再放大招,推出的 ChatGPT 席卷网络,大家又开始…

IEEE IS评选AI十大新星,9位华人获奖

最近人工智能领域著名杂志 IEEE Intelligent Systems公布了 2022 年度「人工智能十大新星」(AIs 10 to Watch)名单 ,其中有九位都是华人研究者。 推荐阅读: ▶不愁失业!英伟达 CEO 黄仁勋:“AI 让每个人都能…

死磕数据库系列(三十二):MySQL 数据库、数据表管理工具介绍

关注公众号,回复“1024”获取2TB学习资源! 今天我将详细的为大家介绍 MySQL 数据库、数据表相关工具的相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!! 数据…

IBM停止招聘可被AI取代的职位;三星禁止员工使用ChatGPT;印象笔记官方AI免费课;清华美院AI绘画的高质量分享 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 『IBM将停止招聘可被人工智能取代的职位』近8000名工人将被自动化取代 据彭博社报道,IBM首席执行官Arvind Krishna表示&am…

死磕数据库系列(三十一):MySQL 服务器 CPU、磁盘、内存等硬件选型

点关注公众号,回复“1024”获取2TB学习资源! 今天我将详细的为大家介绍 MySQL 服务器的磁盘及相关硬件选型的相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!更多关于MyS…

Linux 中 root 与 sudo 的用法与区别,居然这么多人搞不清楚。。。

点关注公众号,回复“1024”获取2TB学习资源! Linux 下面有两个概念可能大家接触的比较多,一个是 sudo 命令,还有一个是 root 账户。Sudo 命令可以以最高权限执行命令,而 root 账户下所有命令都有最高权限,也…

面试官:TCP 连接数最大不能超过 65535?那服务器是如何应对百万千万并发的?...

点关注公众号,回复“1024”获取2TB学习资源! 最大并发 tcp 连接数是多少呢? 首先,问题中描述的65535个连接指的是客户端连接数的限制。 在tcp应用中,server事先在某个固定端口监听,client主动发起连接&…

2023年春秋杯网络安全联赛春季赛 RE复盘(部分待补)

目录 sum Pytrans BWBA Poisoned_tea_CHELL 第一种找程序加密函数的方法 第二种找程序加密函数的方法 解密 这次的春季赛仍是被打爆了,re只做出了一题,发现自己还是太菜了,好在在后期复盘中又收获了许多新知识了,不亏。 su…

2023春秋杯春季赛WP-REVERSE(AK)

REVERSE sumPoisoned_tea_CHELLBWBAPytransEmoji ConnectOldSymbolicCode 浅浅写一下RE的WP~ sum 根据代码,可以看出程序只能输入数字,判断matrix数组对应下标的值是否为0,如果为0,则可以输入一个字符,根据代码逻辑&a…

Servlet基础学习

什么是Servlet? Servlet是一种用于接收web网页传回和输出到web的一个Java类,根据不同的实际需要,实现不同的Servlet来对网页数据进行处理。 Servlet的基本处理流程 在网页发起请求之后,编译器首先去寻找web网页的配置文件&…