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

OpenCV-模板匹配多个目标

文章目录

  • 一、基本概念
  • 二、基本步骤
    • 1.图像准备
    • 2.图像预处理
    • 3.执行模板匹配
    • 4.定位匹配区域
    • 5.处理多个匹配
    • 6.优化和验证
  • 三、代码实现
    • 1.图片读取
    • 2.图像预处理
    • 3.模板匹配
    • 4.绘制矩形框
  • 三、总结

模型匹配(Model Matching)是一个广泛应用的概念,其具体含义和应用领域会根据上下文的不同而有所变化。

一、基本概念

模型匹配是指通过比较待匹配的数据或对象与已有的模型之间的相似度或距离,来寻找最佳匹配的过程。这种方法在多个领域都有广泛应用,包括但不限于图像处理、数据分析、控制系统设计、自然语言处理等。

二、基本步骤

1.图像准备

  • 模板图像:需要被匹配的目标图像,通常是一个较小的图像块。
  • 输入图像:在其中进行搜索以找到与模板图像相似的多个区域的图像。

2.图像预处理

  • 转换为灰度图像:在进行模板匹配之前,通常需要将输入图像和模板图像转换为灰度图像,因为灰度图像中的像素值仅表示亮度,不受颜色影响,更适合进行匹配。
  • 降噪和增强:根据需要,可以对图像进行降噪处理以提高匹配准确性,或进行增强处理以突出目标特征。

3.执行模板匹配

  • 使用模板匹配算法(如OpenCV中的cv2.matchTemplate()函数)在输入图像中搜索与模板图像相似的区域。
  • 模板匹配算法会生成一个结果图像,其中每个像素的值表示该位置与模板图像的匹配程度。

4.定位匹配区域

  • 使用cv2.minMaxLoc()等函数在结果图像中找到匹配度最高的区域(或多个区域,如果设置了适当的阈值)。
  • 根据匹配位置在原图中绘制矩形框或其他标记,以指示匹配到的目标。

5.处理多个匹配

  • 如果需要匹配多个目标,并且这些目标在图像中可能以不同的尺寸、方向或旋转角度出现,则可能需要使用更复杂的算法,如尺度不变特征变换(SIFT)、加速稳健特征(SURF)或ORB等。
  • 对于简单的多目标匹配,可以通过设置较低的匹配阈值来找到多个匹配区域,并分别处理它们。

6.优化和验证

  • 根据需要调整模板匹配算法的参数(如匹配方法、阈值等),以优化匹配结果。
  • 对匹配结果进行验证,确保它们确实是所需的目标,并排除误匹配。

三、代码实现

下面是一个图片的模板匹配,要进行输入的图片定为a.png,旁边就是要匹配的目标图片我们定为1.png。在这一张图片中存在多个目标,所有我们需要对目标图片1.png进行相关处理,例如旋转等操作。下面让我们来展示一下代码片段。

1.图片读取

import cv2
import numpy as npimg_rgb = cv2.imread('a.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('1.png', 0)
  • 读取输入图片与模板图片,并将输入图片进行灰度处理。

2.图像预处理

# 旋转模板
rotated_image1 = cv2.rotate(template, cv2.ROTATE_90_CLOCKWISE)  # 顺时针90°
rotated_image2 = cv2.rotate(template, cv2.ROTATE_90_COUNTERCLOCKWISE)  # 逆时针90°
h, w = template.shape[:2]
  • 这里我们对模板图片进行处理,通过cv2.ROTATE_90_CLOCKWISE与cv2.ROTATE_90_COUNTERCLOCKWISE操作对图片进行顺时针旋转90°和逆时针旋转90°操作。并取其对应的高宽。

3.模板匹配

# 使用模板匹配的方法,cv2.matchTemplate 进行模板匹配
res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
res1 = cv2.matchTemplate(img_gray, rotated_image1, cv2.TM_CCOEFF_NORMED)
res2 = cv2.matchTemplate(img_gray, rotated_image2, cv2.TM_CCOEFF_NORMED)
  • 使用cv2.matchTemplate()在输入图像中搜索与模板图像相似的区域。

4.绘制矩形框

# 设定匹配阈值
threshold = 0.9
# 获取匹配结果中所有符合阈值的点的坐标
for i in (res, res1, res2):loc = np.where(i > threshold)
# 遍历所有的匹配点for pt in zip(*loc[::-1]):# 在原图上绘制匹配区域的矩形框cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 1)cv2.imshow('a.png', img_rgb)
cv2.waitKey(0)

设定阈值,并获取结果中所有符合阈值的点的坐标,然后进行遍历,在原图上进行图像绘制,绘制矩阵框,并显示最终结果。

三、总结

本次主要讲述了模型匹配多个目标的方法过程,通过对模型匹配进行进一步讲解,然后对其方法进行介绍与举例,为大家展示了匹配多个目标的案例,通过对模板图像进行旋转等一系列操作,让其与输入图像中的各个区域相匹配,最终将匹配结果进行绘制矩阵框展示,为大家展示了具体效果。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
  • React学习day07-ReactRouter-抽象路由模块、路由导航、路由导航传参、嵌套路由、默认二级路由的设置、两种路由模式
  • Java多线程面试精讲:源于技术书籍的深度解读
  • Python中 BeautifulSoup和Selenium 定位元素和获取元素值的方法
  • 基于Jeecgboot3.6.3的flowable流程增加任务节点字段的控制(一)
  • 代理导致的git错误
  • 【STM32 Blue Pill编程】-定时器PWM模式
  • 系统架构设计师:软件架构的演化和维护
  • Qt自动打开文件夹并高亮文件
  • Java中的正则表达式
  • Vue.js: 构建动态用户界面的现代框架
  • C# 使用Socket通信,新建WinForm服务端、客户端程序
  • 使用 Nmap 进行 SSL/TLS 加密套件枚举
  • Android 11(API 级别 30)及以上版本中,将Bitmap保存到设备上
  • FreeSWITCH event_socket 配置从其他地址连接
  • 【node学习】协程
  • canvas绘制圆角头像
  • Codepen 每日精选(2018-3-25)
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Octave 入门
  • python 装饰器(一)
  • Python实现BT种子转化为磁力链接【实战】
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • vue-router的history模式发布配置
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 创建一种深思熟虑的文化
  • 番外篇1:在Windows环境下安装JDK
  • 工程优化暨babel升级小记
  • 回流、重绘及其优化
  • 简单实现一个textarea自适应高度
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 一个JAVA程序员成长之路分享
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 怎么把视频里的音乐提取出来
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 【云吞铺子】性能抖动剖析(二)
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • Java数据解析之JSON
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​数据结构之初始二叉树(3)
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (3)选择元素——(17)练习(Exercises)
  • (33)STM32——485实验笔记
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (七)理解angular中的module和injector,即依赖注入