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

《深度学习》OpenCV轮廓检测 模版匹配 解析及实现

目录

一、模型匹配

1、什么是模型匹配

2、步骤

1)提取模型的特征

2)在图像中查找特征点

3)进行特征匹配

4)模型匹配

3、参数及用法

1、用法

2、参数

1)image:待搜索对象

2)templ:模板对象

3)method:计算匹配程度的方法

• TM_SQDIFF:平方差匹配法

• TM_CCORR:相关匹配法

• TM_CCOEFF:相关系数匹配法

• TM_SQDIFF_NORMED:归一化平方差匹配法

• TM_CCORR_NORMED:归一化相关匹配法

• TM_CCOEFF_NORMED:归一化相关系数匹配法

3、代码实现

运行结果为:

二、模型匹配总结

1、概念

2、主要流程

 1)选择合适的模型

 2)准备训练数据

 3)划分训练集和验证集

 4)初始化模型参数

 5)模型训练和调整

 6)模型评估

 7)模型选择

 8)模型应用


一、模型匹配

1、什么是模型匹配

        模型匹配是一种通过在图像中查找识别特定形状或物体的方法。模型匹配基于图像中的特征点,并尝试找到与预定义的模型或样本最匹配的图像区域。

2、步骤

        1)提取模型的特征

                对于模型或样本图像,使用特征提取算法(如SIFT、SURF或ORB)来检测和描述关键点和特征描述符。

        2)在图像中查找特征点

                对于待匹配的图像,同样使用相同的特征提取算法来检测和描述关键点和特征描述符。

        3)进行特征匹配

                通过计算模型特征点和待匹配图像中特征点之间的距离或相似度,找到最合适的匹配点。

        4)模型匹配

                根据特征匹配的结果,通过应用各种匹配算法(如RANSAC)来估算模型在图像中的位置和姿态。

3、参数及用法

        1、用法
cv2.matchTemplate(image, templ, method, result=None, mask=None)

        2、参数
                1)image:待搜索对象
                2)templ:模板对象
                3)method:计算匹配程度的方法
                        • TM_SQDIFF:平方差匹配法

                                该方法采用平方差来进行匹配,匹配越好,值越小,匹配越差,值越大

                        • TM_CCORR:相关匹配法

                               该方法采用乘法操作,数值越大表示匹配程度越好

                        • TM_CCOEFF:相关系数匹配法

                                数值越大表示匹配程度越好

                        • TM_SQDIFF_NORMED:归一化平方差匹配法

                                匹配越好,值越小,匹配越差,值越大

                        • TM_CCORR_NORMED:归一化相关匹配法

                                数值越大表明匹配程度越好

                        • TM_CCOEFF_NORMED:归一化相关系数匹配法

                                数值越大表明匹配程度越好

3、代码实现
import cv2
kele = cv2.imread('kele.png')  # 导入模版图片
template = cv2.imread('template.png')  # 导入模型图片
cv2.imshow('kele',kele)
cv2.imshow('template',template)
cv2.waitKey(0)h,w = template.shape[:2]  # 获取模型高度和宽度
res = cv2.matchTemplate(kele,template,cv2.TM_CCOEFF_NORMED)  # 对模版和模型进行匹配,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,255,0),2)    # 绘制矩形,图像为kele,左上角坐标为top_left,右下角坐标为bottom_right,绘制矩形的颜色为绿色,线条粗细为2cv2.imshow('kele_template',kele_template)
cv2.waitKey(0)

运行结果为:

二、模型匹配总结

1、概念

        模型匹配(Model Fitting)是指将机器学习模型与训练数据进行拟合,使模型能够从数据中学习到最佳的参数或规律。模型匹配是机器学习中一个关键的步骤,它决定了模型的准确性和泛化能力。

        模型匹配的主要目标是通过调整模型的参数或超参数,使得模型能够更好地拟合训练数据,并且在未见过的数据上具有较好的预测能力。

2、主要流程

 1)选择合适的模型

        根据问题的特点和数据的性质,选择合适的机器学习模型。常见的模型包括线性回归、逻辑回归、决策树、支持向量机、神经网络等。

 2)准备训练数据

        将原始数据进行预处理和特征工程,包括数据清洗、特征选择、特征缩放等,以便于模型的学习和训练。

 3)划分训练集和验证集

        将原始数据划分为训练集和验证集。训练集用于模型的学习和参数调整,验证集用于评估模型的性能和选择最佳的参数。

 4)初始化模型参数

        对模型的参数进行初始化,可以使用随机初始化或者根据经验设置。

 5)模型训练和调整

        使用训练集中的数据对模型进行训练,并通过调整参数或超参数来优化模型的性能。常见的优化算法包括梯度下降、随机梯度下降、牛顿法等。

 6)模型评估

        使用验证集中的数据对训练好的模型进行评估,计算评价指标如准确率、精确率、召回率、F1分数等。

 7)模型选择

        根据模型在验证集上的表现选择最佳的模型,可以根据评价指标或交叉验证等方法进行选择。

 8)模型应用

        经过模型匹配和选择后,将最佳的模型应用到测试集或实际数据中进行预

        需要注意的是,模型匹配是一个迭代的过程,需要多次调整参数和模型结构,直到得到满意的结果。同时,模型匹配也需要考虑过拟合和欠拟合问题,以及如何平衡模型的复杂性和泛化能力。

相关文章:

《深度学习》OpenCV轮廓检测 模版匹配 解析及实现

目录 一、模型匹配 1、什么是模型匹配 2、步骤 1)提取模型的特征 2)在图像中查找特征点 3)进行特征匹配 4)模型匹配 3、参数及用法 1、用法 2、参数 1)image:待搜索对象 2)templ&am…...

Java XML

1、XML文件介绍 配置文件:用来保存设置的一些东西。 拿IDEA来举例,比如设置的背景图片,字体信息,字号信息和主题信息等等。 (1)以前是用txt保存的,没有任何优点,而且不利于阅读&a…...

好用的视频压缩工具有哪些?这4款千万不要错过

视频压缩的方法有很多种,像我们手机里的视频剪辑工具,手机和电脑自带的压缩功能,在线压缩网站,专业压缩软件压缩等等。不同的场景和需求下大家可以选择不同的工具,但是如果碰到需要大量和经常压缩视频的话,…...

【Python爬虫系列】_016.关于登录和验证码

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…...

基于opencv实现双目立体匹配点云距离

双目相机或两个单目相机。 一、相机标定 MATLAB软件,打开双目标定app。 点击add images,弹出加载图像的窗口,分别导入左图和右图,设置黑白格长度(标定板的长度一般为20)。 点击确定,弹出加载…...

RabbitMQ高级篇,进阶内容

强烈建议在看本篇博客之前快速浏览文章:RabbitMQ基础有这一篇就够了 RabbitMQ高级篇 0. 前言1. 发送者的可靠性1.1 生产者重试机制1.2 生产者确认机制1.3 实现生产者确认 2. MQ的可靠性2.1 MQ持久化2.2 LazyQueue 3. 消费者的可靠性3.1 消费者确认机制3.2 失败重试策…...

STM32重定义printf,实现串口打印

在“usart.c”文件中加入以下代码 #ifdef __GNUC__#define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endifPUTCHAR_PROTOTYPE{HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);return ch; }…...

项目进度

变为负进度了,还是要用baseservlet,我就又重新写了一部分,看了好几遍视频,突然就想明白了,感觉每次要上课,就时间不连续思路总是断,今天晚自习算是搞懂了怎么写了,就是代码有点多&am…...

Android的内核

Android的内核是基于Linux的长期支持版本的“Android通用内核(ACK)”。 Android作为一个广泛使用的操作系统,其根基在于内核的设计和功能。下面将深入探讨Android内核的各个方面,从其基本结构到与Linux内核的关系,再到内核的版本管理及在设备…...

Github Wiki 超链接 转 码云Gitee Wiki 超链接

Github Wiki 超链接 转 码云Gitee Wiki 超链接 Github 是 :[[相对路径]] Gitee 是 :[链接文字](./相对路径) 查找:\[\[(.*?)\]\] 替换:[$1]\(./$1\) 或替换:**[$1]\(./$1\)** (码云的超链接,很…...

Android10源码刷入Pixel2以及整合GMS

一、ASOP源码下载 具体可以参考我之前发布的文章 二、下载相关驱动包 这一步很关键,关系到编译后的镜像能否刷入后运行 下载链接:Nexus 和 Pixel 设备的驱动程序二进制文件 如下图所示,将两个驱动程序上传到Ubuntu服务器,并进行解压,得到两个脚本: 下载解压后会有两…...

wpf触发与模板的使用示例:批量生产工具

批量生产工具 <Window x:Class"WpfM20UpdateFW.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expressio…...

brew install node提示:Error: No such keg: /usr/local/Cellar/node

打开本地文件发现Cellar目录下无法生成 node文件&#xff0c;应该是下载时出现问题&#xff0c;重复下载无法解决问题&#xff0c;只能重新安装brew。 步骤1&#xff08;安装 brew&#xff09;&#xff1a; /bin/zsh -c “$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/ra…...

记录一下gitlab社区版的安装教程

目录 1.更新系统软件包 2.安装必要的依赖 3.添加GitLab源 3.1对于GitLab Enterprise Edition&#xff08;EE&#xff09;&#xff1a; 3.2对于GitLab Community Edition&#xff08;CE&#xff09;&#xff1a; 4.安装GitLab 4.1安装GitLab Enterprise Edition&#xff08;E…...

20. 如何在MyBatis中处理多表关联查询?常见的实现方式有哪些?

在MyBatis中处理多表关联查询是一项常见的需求&#xff0c;特别是在关系型数据库中存储复杂的实体关系时。MyBatis提供了多种方式来实现多表关联查询&#xff0c;常见的实现方式包括使用<association>和<collection>标签在<resultMap>中进行对象关系映射&…...

【百日算法计划】:每日一题,见证成长(013)

题目 回文链表 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true 思路 找到中间节点反转后半部分链表前后链表顺序比…...

PCL 读取和保存点云

目录 一、概述 1.1原理 1.2实现步骤 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xff09; 一、概述 1.1原理 PCL (Point Cloud Library) 是…...

js | TypeError: Cannot read properties of null (reading ‘indexOf’) 【解决】

js | TypeError: Cannot read properties of null (reading ‘indexOf’) 【解决】 描述 概述 在前端开发中&#xff0c;遇到TypeError: Cannot read properties of null (reading indexOf)这类错误并不罕见。这个错误通常表明你试图在一个null值上调用indexOf方法&#xff0c…...

微信小程序-formData使用

作者&#xff1a;fyupeng 技术专栏&#xff1a;☞ https://github.com/fyupeng 项目地址&#xff1a;☞ https://github.com/fyupeng/distributed-blog-system-api 留给读者 一、介绍 在小程序中使用formdata上传数据&#xff0c;可实现多文件上传 跟浏览器中的FormData对象类…...

潜在语义分析(Latent Semantic Analysis,LSA)—无监督学习方法、非概率模型、判别模型、线性模型、非参数化模型、批量学习

定义 输入: X [ x 11 x 12 ⋯ x 1 n x 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋮ ⋮ x m 1 x m 2 ⋯ x m n ] , 文本集合 D { d 1 , d 2 , ⋯ , d n } , 单词集合 W { ω 1 , ω 2 , ⋯ , ω m } , x i j : 单词 ω i 在文本 d j 中出现的频数或权值 X\left[ \begin{array}{cccc} x_{11} …...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...