Opencv+python模板匹配

我们经常玩匹配图像或者找相似,opencv可以很好实现这个简单的小功能。

模板是被查找目标的图像,查找模板在原始图像中的哪个位置的过程就叫模板匹配。OpenCV提供的matchTemplate()方法就是模板匹配方法,其语法如下:

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

参数说明:

image:原始图像。
templ:模板图像,尺寸必须小于或等于原始图像。
method:匹配的方法,可用参数值如表10.1所示。
mask:可选参数。掩模,只有cv2.TM_SQDIFF和cv2.TM_CCORR_NORMED支持此参数,建议采用默认值。
返回值说明:
result:计算得出的匹配结果。如果原始图像的宽、高分别为W、H,模板图像的宽、高分别为w、h,result就是一个W-w+1列、H-h+1行的32位浮点型数组。数组中每一个浮点数都是原始图像中对应像素位置的匹配结果,其含义需要根据method参数来解读。
在模板匹配的计算过程中,模板会在原始图像中移动。模板与重叠区域内的像素逐个对比,最后将对比的结果保存在模板左上角像素点索引位置对应的数组位置中
OpenCV的matchTemplate函数是用来在一幅图像中寻找另一幅图像的匹配的。在匹配过程中,可以选择不同的匹配方法,也就是method参数。常用的method参数有以下几种:
- cv2.TM_SQDIFF:平方差匹配法,最简单的匹配方法,计算平方差和,值越小越匹配。
- cv2.TM_SQDIFF_NORMED:标准平方差匹配法,同样计算平方差和,但是会对结果进行标准化处理。注意使用距离来计算被匹配图像一定要小于原图像
- cv2.TM_CCORR:相关性匹配法,#,值越大越匹配。
- cv2.TM_CCORR_NORMED:标准相关性匹配法,对结果进行标准化处理,返回值越大表示匹配程度越高,越小表示匹配程度越低。
该参数使用的是归一化相关系数匹配模式,
返回的是匹配图像和模板图像之间的相关系数,取值范围在 0 到 1 之间,1 表示完美匹配,0 表示没有匹配。
- cv2.TM_CCOEFF:相关系数匹配法,计算两个图像的相关系数,值越大越匹配。
- cv2.TM_CCOEFF_NORMED:标准相关系数匹配法,对结果进行标准化处理。

 假设原图如下:

需要找出的图是西瓜

 

代码:


import cv2
import matplotlib.pyplot as plt
import numpy as np
# 读取图像
image = cv2.imread("./image/20240626-3.jpg") #多图
grayImg = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
matchImg = cv2.imread("./image/20240626-4.jpg", 0) #匹配的图# 模板匹配
result = cv2.matchTemplate(grayImg, matchImg, cv2.TM_CCORR_NORMED)
threshold = 0.999# 找到匹配的位置
loc = np.where(result >= threshold)# 绘制矩形
for pt in zip(*loc[::-1]):  # 交换坐标顺序cv2.rectangle(image, pt, (pt[0] + matchImg.shape[1], pt[1] + matchImg.shape[0]), (0, 0, 255), 2)# 显示结果
# 使用 OpenCV 显示
cv2.imshow('Matched Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()# 或者使用 Matplotlib 显示(如果需要)
# plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))  # 注意:将 BGR 转换为 RGB 以供 Matplotlib 显示
# plt.show()

结果:

1、当阈值threshold = 0.999,因为我匹配图就是这个截图,哈哈哈哈

 

2、当阈值threshold = 0.98

3 、当阈值threshold = 0.9

 

 

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

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

相关文章

使用go语言来完成复杂excel表的导出导入

使用go语言来完成复杂excel表的导出导入(一) 1.复杂表的导入 开发需求是需要在功能页面上开发一个excel文件的导入导出功能,这里的复杂指定是表内数据夹杂着一对多,多对一的形式,如下图所示。数据杂乱而且对应不统一。…

中国90米分辨率可蚀性因子K数据

土壤可蚀性因子(K)数据,基于多种土壤属性数据计算,所用数据包括土壤黏粒含量(%)、粉粒含量(%)、砂粒含量(%)、土壤有机碳含量(g/kg)、…

[DALL·E 2] Hierarchical Text-Conditional Image Generation with CLIP Latents

1、目的 CLIP DDPM进行text-to-image生成 2、数据 (x, y),x为图像,y为相应的captions;设定和为CLIP的image和text embeddings 3、方法 1)CLIP 学习图像和文本的embedding;在训练prior和decoder时固定该部分参数 2&a…

开放式耳机什么牌子好一点?亲检的几款开放式蓝牙耳机推荐

不入耳的开放式耳机更好一些,不入耳式耳机佩戴更舒适,适合长时间佩戴,不会引起强烈的压迫感或耳部不适。不入耳式的设计不需要接触耳朵,比入耳式耳机更加卫生且不挑耳型,因此备受运动爱好者和音乐爱好者的喜爱。这里给…

MySQL中ALTER LOGFILE GROUP 语句详解

在 MySQL 的 InnoDB 存储引擎中,ALTER LOGFILE GROUP 语句用于修改重做日志组(redo log group)的配置。重做日志是 InnoDB 用来保证事务持久性的一个关键组件,它们用于在系统崩溃后恢复数据。 InnoDB 支持多个重做日志组&#xf…

周转车配料拣货方案

根据周转车安装的电子标签,被悬挂的扫码器扫到墨水屏显示的二维码,投屏发送配料拣货的数据。 方便快捷分拣物料

20240625(周二)欧美股市总结:标普纳指止步三日连跌,英伟达反弹6.8%,谷歌微软新高,油价跌1%

美联储理事鲍曼鹰派发声,若通胀没有持续改善将支持加息,加拿大5月CPI重新加速,对加拿大央行7月降息构成阻碍。美股走势分化,道指收跌近300点且六日里首跌,英伟达市值重上3.10万亿美元,芯片股指显著反弹1.8%…

想要用tween实现相机的移动,three.js渲染的canvas画布上相机位置一点没动,如何解决??

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

linux 批量mv批量cp | 批量复制粘贴剪切

一、【问题描述】 cp 和 mv这种基本命令,多对一是可以做的 比如 cp /conf/* /despath mv /conf/* /path/bak/ 但是一对多会报错,加-r参数也会报错,而且会有问题,不建议这么做,找一台测试机器你会发现加了-r甚至复制…

每日新闻掌握【2024年6月26日 星期三】

2024年6月26日 星期三 农历五月廿一 大公司/大事件 OpenAI将终止对中国提供API服务 从6月24日晚间开始,已有多名用户收到了来自OpenAI的邮件。该邮件表示,“我们的数据显示您的组织来自OpenAI目前不支持的地区的API流量。”邮件进一步表示,…

高内聚低耦合【代码:ShoppingCart(一个类中提供多种操作购物车的方法体现高内聚)支付方式接口(信用卡类、微信支付类实现支付接口 体现低耦合)】

高内聚低耦合 ⾼内聚指的是:⼀个模块中各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的联系程度越⾼,则内聚性越⾼,即 “⾼内聚”。 低耦合指的是:软件中各个层、模块之间的依赖关联程序越低越好。修…

第1章 物联网模式简介---独特要求和体系结构原则

物联网用例的独特要求 物联网用例往往在功耗、带宽、分析等方面具有非常独特的要求。此外,物联网实施的固有复杂性(一端的现场设备在计算上受到挑战,另一端的云容量几乎无限)迫使架构师做出艰难的架构决策和实施选择。可用实现技…

【自动调参】年化29.3%,最大回撤18.5%​:lightGBM的参数优化

原创文章第570篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 研报复现继续:【研报复现】年化27.1%,人工智能多因子大类资产配置策略之benchmark 昨天调了一版参数,主要是lambda_l1, lambda_l2,防…

Vmvare12安装CentOS7.6

Vmvare12安装 注意事项 安装完成以后有这两个虚拟网卡。 CentOS官网镜像地址 https://www.centos.org/download/mirrors/Vmvare安装CentOS7.6 创建虚拟机 安装CentOS7.6 选择桌面版 磁盘分区 上述是确认使用自动分区。 设置密码 设置license information 欢迎页面 CentOS7…

使用Python实现网页数据获取与处理:以财经新闻为例

在现代数据驱动的世界中,获取并处理丰富的网页数据是非常重要的技能。本文将介绍如何使用Python编写一个程序,自动获取财经新闻数据并进行处理。这不仅可以帮助我们快速获取最新的财经信息,还可以为后续的数据分析和研究提供支持。 环境准备…

宝兰德受邀出席华为开发者大会2024,携手共绘基础软件新篇章

6月21日-23日,华为开发者大会(HDC 2024)在东莞松山湖举行,作为全球开发者的年度盛会,本次大会汇聚了众多业界精英与前沿技术。华为分享了HarmonyOS、盘古大模型、昇腾AI云服务、GaussDB数据库、自研仓颉编程语言等最新…

微信小程序录音

微信小程序的录音功能通过一组API来实现,主要涉及录音管理器(RecorderManager)的使用。下面是详细的实现步骤和代码示例: 初始化录音管理器 首先需要获取录音管理器的实例,可以通过 wx.getRecorderManager() 方法来获…

【IM即时通信 功能介绍】客户端用户在线状态订阅

本文档旨在介绍客户端用户在线状态订阅功能,该功能允许开发者通过 SDK 接口实时监控和接收指定用户的在线或离线状态变更通知。这一功能对于需要实时交流、状态同步或用户活动监控的应用场景至关重要。 功能特点 实时状态通知 跨平台通知:订阅成功后&…

使用 MediaPipe 实现实时手部追踪和手势识别 | Rerun展示

点击下方卡片,关注“小白玩转Python”公众号 在本文中,我将展示一个使用 MediaPipe Python 和 Rerun SDK 进行手部追踪和手势识别的示例。如果您有兴趣深入了解并扩展您的知识,我将指导您如何安装 MediaPipe Python 和 Rerun SDK 来进行手部追…

深入Scala的变量声明与类型推断:语法糖下的智能推导

Scala是一种静态类型语言,以其强大的类型推断系统而闻名。变量声明和类型推断是Scala编程中的基础概念,它们共同简化了代码的编写并提高了开发效率。本文将深入探讨Scala中变量声明的语法规则和类型推断的工作原理。 1. Scala静态类型的优越性 静态类型…