《OpenCV》——模版匹配

文章目录

  • OpenCV——模版匹配简介
  • 模版匹配使用场景
  • OpenCV 中模板匹配的函数
    • 参数
  • OpenCV——模版匹配实例
    • 导入所需库
    • 读取图片并处理图片
    • 对模版图片进行处理
    • 进行模版匹配
    • 显示模版匹配的结果
    • 注意事项

OpenCV——模版匹配简介

  • OpenCV 是一个非常强大的计算机视觉库,其中的模板匹配功能提供了高效的工具来实现图像中的目标定位。
  • 从本质上来说,模板匹配是一种用于在给定的图像(或其他类型的数据,如文本序列等,但主要以图像为例)中寻找与已知模板最相似部分的方法。这个模板可以是一个小的图像区域,例如,你想在一张风景照片中找到某个特定的标志,这个标志的图像就是模板。
  • 它的基本原理是通过在目标图像的各个位置滑动模板,并计算模板与图像在每个位置的相似度度量。这个相似度度量可以通过多种方式计算,例如计算像素值的差异等。

模版匹配使用场景

  • 目标检测:假设在一个监控视频中,需要检测是否出现了特定的物体,如汽车的车牌。可以将车牌的标准图像作为模板,在视频的每一帧图像中进行模板匹配,找到与车牌模板最相似的区域,从而实现车牌的定位检测。
  • 物体识别:如果要识别图像中的某个产品品牌标志,把不同品牌标志的图像做成模板,在目标图像中进行匹配,通过比较匹配程度来判断物体属于哪个品牌。

OpenCV 中模板匹配的函数

在 OpenCV 中,主要使用matchTemplate函数来进行模板匹配。这个函数的基本语法如下:

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

参数

  • image:这是目标图像,也就是要在其中寻找模板的图像。它应该是一个 8 位或 32 位的单通道或彩色图像。
  • templ:这是模板图像,是要在目标图像中找到的小图像区域。同样可以是单通道或彩色图像,但要注意其尺寸通常比目标图像小。
  • method:这是匹配方法,OpenCV 提供了多种匹配方法,如cv.TM_SQDIFF(平方差匹配法)、cv.TM_CCORR(相关性匹配法)、cv.TM_CCOEFF(相关系数匹配法)等。不同的方法在计算模板和目标图像之间的相似度时有不同的侧重点。
  • 例如,cv.TM_SQDIFF方法计算模板与目标图像每个位置的平方差,得到的结果矩阵中,值越小表示匹配程度越高;而cv.TM_CCORR方法计算相关性,值越大表示匹配程度越高。

OpenCV——模版匹配实例

对下方图片进行模版匹配:
在这里插入图片描述
模版:
在这里插入图片描述
目标:找到图中所有的箭头

导入所需库

  • 首先需要导入 OpenCV 库和 NumPy 库。
import cv2
import numpy as np

读取图片并处理图片

img_rgb = cv2.imread('yuan_tu.jpg')
# 对图片进行灰度图处理
img_gray = cv2.cvtColor(img_rgb,cv2.COLOR_BGR2GRAY)
template = cv2.imread('jian_tou.jpg', 0)
# 读取模版图片的高和宽
h,w = template.shape[:2]

对模版图片进行处理

通过对模版图片的顺时针和逆时针处理,后面能将所有箭头都找出。

# 分别顺时针逆时针旋转
xuan_zhuan1 =cv2.rotate(template,cv2.ROTATE_90_CLOCKWISE)

xuan_zhuan2 =cv2.rotate(template,cv2.ROTATE_90_COUNTERCLOCKWISE)

进行模版匹配

通过遍历箭头图片和处理后的两张箭头图片,将得到的结果绘制到原图上。

# 进行模版匹配
for i in [template,xuan_zhuan1,xuan_zhuan2]:
    res = cv2.matchTemplate(img_gray,i,cv2.TM_CCOEFF_NORMED)
    # 设定匹配阈值
    threshold = 0.9
    # 获取匹配结果中所有符合阈值的坐标
    loc = np.where(res>=threshold)
    # 遍历所有匹配点
    for pt in zip(*loc[::-1]):
        # 在原图上绘制匹配区域的矩形框
        cv2.rectangle(img_rgb,pt,(pt[0]+w,pt[1]+h),(0,0,255),1)

显示模版匹配的结果

显示图片结果,结束后释放内存。

cv2.imshow('res.png',img_rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

注意事项

  • 图像预处理:在进行模板匹配之前,可能需要对目标图像和模板图像进行预处理。例如,将图像转换为灰度图(如果使用基于灰度的匹配方法),或者进行归一化操作以减少光照等因素的影响。可以使用cv.cvtColor函数将彩色图像转换为灰度图,如gray_target = cv.cvtColor(target_image, cv.COLOR_BGR2GRAY)。
  • 多目标匹配:如果目标图像中可能存在多个与模板匹配的目标,上述示例只是找到了最佳匹配位置。要找到所有匹配位置,可以设置一个阈值,当匹配程度(根据匹配方法得到的结果矩阵中的值)超过这个阈值时,就认为是一个匹配目标。然后通过遍历结果矩阵来找到所有满足阈值条件的位置,并标记出来。
  • 性能优化:当处理大尺寸图像或复杂模板时,模板匹配可能会比较耗时。可以考虑使用图像金字塔等技术来加速匹配过程,先在低分辨率的图像上进行粗匹配,然后在高分辨率图像上进行精匹配。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

迅翼SwiftWing | ROS 固定翼开源仿真平台正式发布!

经过前期内测调试,ROS固定翼开源仿真平台今日正式上线!现平台除适配PX4ROS环境外,也已实现APROS环境下的单机飞行控制仿真适配。欢迎大家通过文末链接查看项目地址以及具体使用手册。 1 平台简介 ROS固定翼仿真平台旨在实现固定翼无人机决策…

基于深度学习的视觉检测小项目(十二) 使用线条边框和渐变颜色美化界面

到目前为止,已经建立起了基本的项目架构,样式表体系也初步具备,但是与成品的界面相比,还是差点什么。 我的界面效果图: 优秀demo的界面截图: 是的,我的界面太“平” 了,没有立体感&…

MySQL(高级特性篇) 06 章——索引的数据结构

一、为什么使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构,就好比一本教科书的目录部分,通过目录找到对应文章的页码,便可快速定位到需要的文章。MySQL中也是一样的道理,进行数据查找时,首先查看查询条件…

Springboot + vue 图书管理系统

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…

2025年01月15日Github流行趋势

1. 项目名称:tabby - 项目地址url:https://github.com/TabbyML/tabby - 项目语言:Rust - 历史star数:25764 - 今日star数:1032 - 项目维护者:wsxiaoys, apps/autofix-ci, icycodes, liangfung, boxbeam - 项…

详解数据增强中的平移shft操作

Shift 平移是指在数据增强(data augmentation)过程中,通过对输入图像或目标进行位置偏移(平移),让目标在图像中呈现出不同的位置。Shift 平移的目的是增加训练数据的多样性,从而提高模型对目标在…

Linux:地址空间(续)与进程控制

hello,各位小伙伴,本篇文章跟大家一起学习《Linux:地址空间与进程控制》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 如果本篇文章对你有帮助,还请各位点点赞&#xff0…

RabbitMQ(三)

RabbitMQ中的各模式及其用法 工作队列模式一、生产者代码1、封装工具类2、编写代码3、发送消息效果 二、消费者代码1、编写代码2、运行效果 发布订阅模式一、生产者代码二、消费者代码1、消费者1号2、消费者2号 三、运行效果四、小结 路由模式一、生产者代码二、消费者代码1、消…

ssh,samba,tftp,nfs服务安装和配置

前提准备 sudo ufw disable sudo ufw status sudo apt update ssh服务 sudo apt-get install openssh-server sudo apt-get install openssh-client sudo apt-get install ssh echo "PasswordAuthentication yes" >> /etc/ssh/ssh_config //配置ssh客户…

.NetCore 使用 NPOI 读取带有图片的excel数据

在.NetCore使用NPOI插件进行批量导入时,获取Excel中的所有的图片数据,存到集合中。 1.定义类PictureData 代码如下: public class PictureData { public byte[] Data { get; set; } } 2.数据集引用 using NPOI.XSSF.UserModel; usin…

MAC上安装Octave

1. 当前最新版Octave是9.3版本,需要把mac os系统升级到14版本(本人之前的版本是10版本) https://wiki.octave.org/Octave_for_macOS octave的历史版本参考此文档:Octave for macOS (outdated) - Octavehttps://wiki.octave.org/Oc…

文档智能:OCR+Rocketqa+layoutxlm <Rocketqa>

此次梳理Rocketqa,个人认为该篇文件讲述的是段落搜索的改进点,关于其框架:粗检索 重排序----(dual-encoder architecture),讲诉不多,那是另外的文章; 之前根据文档智能功能&#x…

算法每日双题精讲 —— 二分查找(二分查找,在排序数组中查找元素的第一个和最后一个位置)

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧!&#x1f4aa…

【RDMA学习笔记】1:RDMA(Remote Direct Memory Access)介绍

从帝国理工的PPT学习。 什么是RDMA Remote Direct Memory Access,也就是Remote的DMA,是一种硬件机制,能直接访问远端结点的内存,而不需要处理器介入。 其中: Remote:跨node进行数据传输Direct&#xff…

「实战应用」如何为DHTMLX JavaScript 甘特图添加进度线

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。 今天,您将学习如何使用进度线补充JavaScript 甘特图,以便于监控项目进度。 DHTMLX Gantt 最新试用版下载 …

爬虫后的数据处理与使用(使用篇--实现分类预测)

()紧接上文,在完成基本的数据处理后,接下来就是正常的使用了。当然怎么用,确实需要好好思考一下~ 上文:爬虫后的数据处理与使用(处理篇) 前言: 一般来说,我…

难绷,一种重命名+符号链接禁用EDR(Crowdstrike)的方法

最近看到的一个项目&#xff1a;https://github.com/rad9800/FileRenameJunctionsEDRDisable #include <windows.h>#include <winioctl.h>#include <stdio.h> typedef struct _REPARSE_DATA_BUFFER{ ULONG ReparseTag; USHORT ReparseDataLength; …

数仓建模(三)建模三步走:需求分析、模型设计与数据加载

本文包含&#xff1a; 数据仓库的背景与重要性数据仓库建模的核心目标本文结构概览&#xff1a;需求分析、模型设计与数据加载 目录 第一部分&#xff1a;需求分析 1.1 需求分析的定义与目标 1.2 需求分析的步骤 1.2.1 业务需求收集 1.2.2 技术需求分析 1.2.3 成果输出…

微信小程序-Docker+Nginx环境配置业务域名验证文件

在实际开发或运维工作中&#xff0c;我们时常需要在 Nginx 部署的服务器上提供一个特定的静态文件&#xff0c;用于域名验证或第三方平台验证。若此时使用 Docker 容器部署了 Nginx&#xff0c;就需要将该验证文件正确地映射&#xff08;挂载&#xff09;到容器中&#xff0c;并…

Python Wi-Fi密码测试工具

Python Wi-Fi测试工具 相关资源文件已经打包成EXE文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Python相关程序案例&#xff0c;秉着开源精神的想法&#xff0c;望大家喜欢&#xff0c;点…