当前位置: 首页 > news >正文

机器学习:opencv图像识别--模版匹配

目录

一、模版匹配的核心概念

1.图片模板匹配是一种用于在图像中查找特定模式或对象的技术。

2.模板图像

3.目标图像

4.滑动窗口

5.相似度度量

6.匹配位置

二、模版匹配的步骤

1.准备图像:

2.预处理:

3.匹配:

4.定位最佳匹配:

5.标记结果:

6.显示或处理结果:

三、代码实现


一、模版匹配的核心概念

1.图片模板匹配是一种用于在图像中查找特定模式或对象的技术。

 

2.模板图像

  • 这是你要在目标图像中找到的部分。模板图像通常比目标图像小,并且包含你感兴趣的特征。        

 

3.目标图像

  • 这是包含模板图像的图像。在目标图像中,你希望找到与模板图像匹配的区域。

 

4.滑动窗口

  • 模板图像像一个窗口一样在目标图像上滑动。这种滑动可以是从左到右,从上到下,或以其他方式覆盖整个目标图像。

 

5.相似度度量

在每个窗口位置,计算模板图像与目标图像窗口区域的相似度。常见的相似度度量包括:

  • 归一化互相关(NCC):衡量两个图像块之间的相似度,通过比较像素值的相关性。
  • 均方误差(MSE):计算模板图像与目标图像窗口区域之间的像素差异的平方和。
  • 结构相似性(SSIM):评估图像的亮度、对比度和结构相似度。

 

6.匹配位置

  • 通过比较相似度度量的结果,确定模板图像在目标图像中最佳的匹配位置。通常,最大或最小的相似度值指示了最佳匹配。

 

二、模版匹配的步骤

1.准备图像

  • 目标图像:这是你希望在其中查找模板图像的图像。
  • 模板图像:这是你要在目标图像中查找的图像片段或图案。

 

2.预处理

  • 灰度化(可选):将目标图像和模板图像转换为灰度图像,以简化计算和提高效率(对于一些匹配方法,灰度化是可选的)。

 

3.匹配

  • 使用匹配算法计算模板图像与目标图像不同位置之间的相似度。这些算法会生成一个相似度矩阵,矩阵中的每个值表示模板图像在目标图像某个位置的匹配度。

 

4.定位最佳匹配

  • 从相似度矩阵中找出最佳匹配的位置。通常,这会是矩阵中的最大值(表示最相似的区域)。

 

5.标记结果

  • 在目标图像上标记出匹配区域,通常是通过绘制一个矩形框来突出显示找到的模板图像的位置。

 

6.显示或处理结果

  • 显示带有匹配标记的目标图像,或将结果保存以供后续处理。

 

三、代码实现

  • 完整代码 以及函数参数介绍
  • 使用的是cv2.matchTemplate()方法
"""模版匹配"""# cv2.matchTemplate(image, templ, method, result=None, mask=None)
# image:待搜索图像
# templ:模板图像
# method:计算匹配程度的方法,可以有:
#       TM_SQDIFF 平方差匹配法:该方法采用平方差来进行匹配;匹配越好,值越小;匹配越差,值越大。
#       TM_CCORR 相关匹配法:该方法采用乘法作;数值越大表明匹配程度越好。
#       TM_CCOEFF 相关系数匹配法:数值越大表明匹配程度越好。
#       TM_SQDIFF_NORMED 归一化平方差匹配法,匹配越好,值越小;匹配越差,值越大。
#       TM_CCORR_NORMED 归一化相关匹配法,数值越大表明匹配程度越好。
#       TM_CCOEFF_NORMED 归一化相关系数匹配法,数值越大表明匹配程度越好。import cv2kele = cv2.imread('baishi.jpg')
moban = cv2.imread('baishikele.png')
cv2.imshow('baishi', kele)
cv2.imshow('moban', moban)
cv2.waitKey(0)h, w = moban.shape[:2]  # 获取模版图片的高宽
res = cv2.matchTemplate(kele, moban, cv2.TM_CCOEFF_NORMED)   # 返回一个矩阵,其中每个元素表示该位置与模板的匹配程度
# cv2.minMaxLoc可以获取矩阵中的最小值和最大值,以及最小值的索引号和最大值的索引号
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)  # 最小值、最大值、最小值位置、最大值位置
top_left = max_loc  # 最大值为匹配到的模板的左上角
bottom_right = (top_left[0] + w, top_left[1] + h)  # 主图片中用模版匹配到的位置
kele_template = cv2.rectangle(kele, top_left, bottom_right, (0, 0, 255), thickness=3)cv2.imshow('kele_template', kele_template)
cv2.waitKey(0)

输出:

也可以自己找图片进行截图尝试模版匹配

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 华为OD机试真题E卷-计算网络信号(含题目描述+解题思路+代码解析)
  • 前端打包装包——设置镜像
  • 机试算法模拟题 服务中心选址
  • 利用命令模式构建高效的手游后端架构
  • Reflection反射——Class类
  • 大模型训练数据库Common Crawl
  • Python判断两张图片的相似度
  • 汽车免拆诊断案例 | 2013款捷豹XF车偶尔无法起动
  • Jupyter Notebook 修改默认路径
  • 【Linux】:信号的保存和信号处理
  • CCF推荐C类会议和期刊总结:(计算机体系结构/并行与分布计算/存储系统领域)
  • macos 系统文件操作时提示 Read-only file system 解决方法
  • 计算机网络--第六章应用层
  • React实现虚拟列表的优秀库介绍
  • 隐马尔可夫模型(Hidden Markov Model,HMM)—有监督学习方法、概率模型、生成模型
  • [Vue CLI 3] 配置解析之 css.extract
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Apache Pulsar 2.1 重磅发布
  • Babel配置的不完全指南
  • k个最大的数及变种小结
  • Laravel核心解读--Facades
  • maya建模与骨骼动画快速实现人工鱼
  • Netty 4.1 源代码学习:线程模型
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 基于axios的vue插件,让http请求更简单
  • ------- 计算机网络基础
  • 记一次和乔布斯合作最难忘的经历
  • 深入浏览器事件循环的本质
  • 时间复杂度与空间复杂度分析
  • AI算硅基生命吗,为什么?
  • postgresql行列转换函数
  • 阿里云API、SDK和CLI应用实践方案
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • #职场发展#其他
  • (11)MATLAB PCA+SVM 人脸识别
  • (javascript)再说document.body.scrollTop的使用问题
  • (笔试题)合法字符串
  • (二十三)Flask之高频面试点
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (十五)使用Nexus创建Maven私服
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一) 初入MySQL 【认识和部署】
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .equals()到底是什么意思?
  • .NET CORE Aws S3 使用
  • .net core 控制台应用程序读取配置文件app.config
  • .net core使用ef 6
  • .net FrameWork简介,数组,枚举
  • .NET 设计模式初探