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

OPENCV C++(十二)模板匹配

正常模板匹配函数

matchTemplate(img, templatee, resultMat, 0);//模板匹配

 这里0代表的是方法,一般默认为0就ok 

img是输入图像 templatee是模板 resultmat是输出

1、cv::TM_SQDIFF:该方法使用平方差进行匹配,因此最佳的匹配结果在结果为0处,值越大匹配结果越差。2、cv::TM_SQDIFF_NORMED:该方法使用归一化的平方差进行匹配,最佳匹配也在结果为0处。3、cv::TM_CCORR:相关性匹配方法,该方法使用源图像与模板图像的卷积结果进行匹配,因此,最佳匹配位置在值最大处,值越小匹配结果越差。4、cv::TM_CCORR_NORMED:归一化的相关性匹配方法,与相关性匹配方法类似,最佳匹配位置也是在值最大处。5、cv::TM_CCOEFF:相关性系数匹配方法,该方法使用源图像与其均值的差、模板与其均值的差二者之间的相关性进行匹配,最佳匹配结果在值等于1处,最差匹配结果在值等于-1处,值等于0直接表示二者不相关。6、cv::TM_CCOEFF_NORMED:归一化的相关性系数匹配方法,正值表示匹配的结果较好,负值则表示匹配的效果较差,也是值越大,匹配效果也好。

对于输出的说明:

就是说result图像中的每一个点的值代表了一次相似度比较结果。

 如图可知,模板在待测图像上每次在横向或是纵向上移动一个像素,并作一次比较计算,由此,横向比较W-w+1次,纵向比较H-h+1次,从而得到一个(W-w+1)×(H-h+1)维的结果矩阵,result即是用图像来表示这样的矩阵,因而图像result的大小为(W-w+1)×(H-h+1)。匹配结果图像与原图像之间的大小关系,他们之间差了一个模板大小。

对输出值的归一化

 

normalize(resultMat, resultMat, 0, 1, NORM_MINMAX, -1, Mat());//归一化

找出最佳匹配的位置:

	double minVal; double maxVal; Point minLoc; Point maxLoc;Point matchLoc;minMaxLoc(resultMat, &minVal, &maxVal, &minLoc, &maxLoc, Mat());matchLoc = minLoc;

 我们这里选择了最小值的位置,因为我们选的第一种方法也就是值越小越好,其他方法有可能是选最大的位置!!

在图像画出匹配最佳:
 

	Mat dispmat;img.copyTo(dispmat);rectangle(dispmat, matchLoc, Point(matchLoc.x + templatee.cols, matchLoc.y + templatee.rows),CV_RGB(0,255,0), 2, 8, 0);imshow("dispmat", dispmat);waitKey(0);destroyAllWindows();

结果显示



利用opencv自带选取roi+模板匹配,进行简单的人脸追踪识别 

选取roi

	if (cnt == 0) {Rect2d r;r = selectROI(frame, true);tempMat = frame(r);tempMat.copyTo(refMat);destroyAllWindows();}

 完整代码:
 

	VideoCapture cap(0);Mat frame;Mat tempMat;Mat refMat;Mat dispMat;Mat resultMat;int cnt = 0;while (1) {cap >> frame;if (cnt == 0) {Rect2d r;r = selectROI(frame, true);tempMat = frame(r);tempMat.copyTo(refMat);destroyAllWindows();}imshow("template", refMat);int match_method = 0;matchTemplate(frame, refMat, resultMat, match_method);normalize(resultMat, resultMat, 0, 1, NORM_MINMAX, -1, Mat());double minVal; double maxVal; Point minLoc; Point maxLoc;Point matchLoc;minMaxLoc(resultMat, &minVal, &maxVal, &minLoc, &maxLoc, Mat());if (match_method == TM_SQDIFF || match_method == TM_SQDIFF_NORMED){matchLoc = minLoc;}else{matchLoc = maxLoc;}frame.copyTo(dispMat);rectangle(dispMat, matchLoc, Point(matchLoc.x + refMat.cols, matchLoc.y + refMat.rows), Scalar::all(0), 2, 8, 0);cnt++;//imshow("template", refMat);imshow("dispMat", dispMat);waitKey(30);

至此opencv基础学习到此结束 后期学习一些进阶自学内容。

************************************************----***********************************************************

相关文章:

OPENCV C++(十二)模板匹配

正常模板匹配函数 matchTemplate(img, templatee, resultMat, 0);//模板匹配 这里0代表的是方法,一般默认为0就ok img是输入图像 templatee是模板 resultmat是输出 1、cv::TM_SQDIFF:该方法使用平方差进行匹配,因此最佳的匹配结果在结果为…...

【配置环境】Linux下安装MySQL

目录 一,环境 二,安装步骤 1.使用包管理器安装MySQL 2.配置MySQL的安全选项 3.设置root用户使用密码进行身份验证(可选) 三,拓展知识 1.如何修改MySQL的密码策略? 一,环境 VMware Workst…...

【100天精通python】Day30:使用python操作数据库_数据库基础入门

专栏导读 专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html 1 数据库基础知识介绍 1.1 什么是数据库? 数据库是一个结构化存储和组织数据的集合,它可以被有效地访问、管理和更新。数据库的目的是为了提供一种可靠的…...

android 如何分析应用的内存(十八)终章——使用Perfetto查看内存与调用栈之间的泄露

android 如何分析应用的内存(十八) 在前面两篇文章中,先是介绍了如何用AS查看Android的堆内存,然后介绍了使用MAT查看 Android的堆内存。AS能够满足基本的内存分析需求,但是无法进行多个堆的综合比较,因此…...

arcpy实现kml批量转出为shp 包括shp合并

参考文章 arcpy实现 kml批量转出为shp_kml批量合并转shp_A873054267的博客-CSDN博客 参考帮助是arcgis里边自带的KMLToLayer_conversion函数 应用场景: 两步路产生的多个轨迹文件KML,批量转换成arcgis 的gdb数据库 最后合并成一个shp 第一步&#…...

高等数学:泰勒公式

注:第三条 e x e^x ex的展开式,在 1 1 1和 1 2 x 2 \frac{1}{2}x^2 21​x2之间添上一个 x x x。 1 1 − x ∑ n 0 ∞ x n 1 x x 2 x 3 ο ( x 3 ) , x ∈ ( − 1 , 1 ) . \begin{aligned}\frac{1}{1-x}\sum_{n0}^\infty x^n1xx^2x^3\omicron(x^…...

JZ32 从上往下打印二叉树(Java)

题目地址:从上往下打印二叉树_牛客题霸_牛客网 题目回顾: 不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印&…...

hackNos靶机

靶机训练1 - hackNos: Os-hackNos 靶机平台 Vulnhub 是一个提供各种漏洞环境的靶场平台,供安全爱好者学习使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行。每个镜像会有破解的目…...

取地址及 const取地址操作符重载

取地址及 const取地址操作符重载 #include <iostream> using namespace std;class A { public:A(int year, int month, int day){_year year;_month month;_day day;}//它们是默认成员函数&#xff0c;我们不写编译器会自动生成&#xff0c;自动生成就够用了&#xff…...

【Linux初阶】进程间通信介绍 管道

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux初阶】 ✒️✒️本篇内容&#xff1a;进程间通信介绍&#xff0c;管道概述&#xff0c;匿名管道应用&#xff0c;命名管道应用 &#x1f6a2;&#…...

App 在macOS Catalina下提示已损坏无法打开解决办法:

App 在macOS Catalina下提示已损坏无法打开解决办法&#xff1a; 打开终端&#xff1b; 输入以下命令&#xff0c;回车&#xff1b; sudo xattr -d com.apple.quarantine /Applications/xxxx.app注意&#xff1a;/Applications/xxxx.app 换成你的App路径&#xff08;推荐直接…...

ad+硬件每日学习十个知识点(26)23.8.6 (DCDC的降压电路、升压电路、降压-升压电路,同步整流,选型考虑同步、隔离)

文章目录 1.DCDC的降压原理2.DCDC的升压原理3.DCDC的升压和降压原理4.什么是肖特基二极管造成的死区电压&#xff1f;5.MOS管有死区电压么&#xff1f;6.DCDC的同步整流&#xff08;用MOS管取代整流二极管&#xff0c;避免死区电压的影响&#xff09;7.DCDC选型——同步与非同步…...

Elasticsearch3节点集群配置账号密码安全验证

Elasticsearch3节点集群配置账号密码安全验证 ES配置文件 rootnode1:~# grep -Ev "^#|^$" /etc/elasticsearch/elasticsearch.yml cluster.name: es-pre node.name: node1 node.master: true node.data: true path.data: /data/elk/es/data path.logs: /data/elk/…...

ffmepg滤镜

视频按顺时针方向旋转90度 ffplay -vf transpose1 -i juren-30s.mp4 ffplay -f lavfi -i testsrc -vf transpose1 -f lavfi -i testsrc这个滤镜是ffmpeg给用户的一个测试使用的视频 视频水平翻转(左右翻转) -vf hflip 实现慢速播放&#xff0c;声音速度是原始速度的50% ffpla…...

Linux 基础(六)常用命令 - find locate which whereis gzip gunzip tar

find & locate & which & whereis & gzip & gunzip & tar findlocatewhichwhereisgzipgunzipzip/unziptar find 在指定目录下查找文件或目录 find --help Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...…...

【Ajax】回调地狱解决方法

回调地狱&#xff08;Callback Hell&#xff09;是指在异步编程中&#xff0c;特别是在嵌套的回调函数中&#xff0c;代码变得深度嵌套、难以阅读和维护的现象。这通常发生在处理多个异步操作时&#xff0c;每个操作都依赖于前一个操作的结果。回调地狱使代码变得难以理解、扩展…...

解决Vue根组件设置transition失效的问题

解决Vue根组件设置transition失效的问题 1.代码 <div id"app"><!-- :name"$route.meta.transitionName" --><transition :name"animation" mode"out-in"><router-view /></transition></div>&…...

【剑指 Offer 40】最小的k个数

题目&#xff1a; 输入整数数组 arr &#xff0c;找出其中最小的 k 个数。例如&#xff0c;输入 4、5、1、6、2、7、3、8 这 8 个数字&#xff0c;则最小的 4 个数字是 1、2、3、4。 示例&#xff1a; 输入&#xff1a;arr [3,2,1], k 2 输出&#xff1a;[1,2] 或者 [2,1] …...

vue3+vite在main.ts文件中引入./App.vue报错(./App.vue不是模块)

问题 如下图&#xff1a; 方法一 下载TypeScript Vue Plugin (Volar)插件就不报红了&#xff0c;看它的描述应该就是ts文件可以识别vue文件。 方法二 在src文件夹下添加env.d.ts文件&#xff0c;添加以下代码&#xff1a; declare module *.vue {import type { DefineC…...

【LeetCode】102. 二叉树的层序遍历、107. 二叉树的层序遍历 II

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 102. 二叉树的层序遍历 102. 二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节…...

从‘亚利桑那大学多项式’到Zemax实操:一文理清Zernike条纹多项式与标准多项式的区别与选用指南

从‘亚利桑那大学多项式’到Zemax实操&#xff1a;一文理清Zernike条纹多项式与标准多项式的区别与选用指南 在光学设计和波前分析领域&#xff0c;Zernike多项式就像是一把瑞士军刀&#xff0c;能够将复杂的波前畸变分解为一系列正交的基函数。但当你第一次打开Zemax的波前分析…...

FortiOS 7.0 HA配置避坑指南:从‘不同步’到绿灯全亮的五个关键检查点

FortiOS 7.0高可用性配置深度排障手册 当企业关键业务部署在FortiGate防火墙后方时&#xff0c;高可用性(HA)集群的稳定运行直接关系到业务连续性。但在实际部署中&#xff0c;约42%的技术团队会遇到配置完成后HA状态持续显示"不同步"或红灯告警的情况。本文将拆解五…...

如何快速掌握R3nzSkin:英雄联盟国服换肤的完整指南

如何快速掌握R3nzSkin&#xff1a;英雄联盟国服换肤的完整指南 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 在英雄联盟国服中&#xff0c;你是否曾羡…...

告别Visio!用Python+D3.js自动绘制你的网络拓扑图(附完整代码)

告别Visio&#xff01;用PythonD3.js自动绘制你的网络拓扑图&#xff08;附完整代码&#xff09; 网络工程师们是否厌倦了在Visio中手动拖拽图标、反复调整连线&#xff1f;当设备增减或链路变更时&#xff0c;那些精心绘制的静态拓扑图往往在几天内就变得过时。本文将展示如何…...

RPG Maker MV/MZ 资源解锁指南:3分钟学会游戏资源解密与加密

RPG Maker MV/MZ 资源解锁指南&#xff1a;3分钟学会游戏资源解密与加密 【免费下载链接】RPG-Maker-MV-Decrypter You can decrypt RPG-Maker-MV Resource Files with this project ~ If you dont wanna download it, you can use the Script on my HP: 项目地址: https://g…...

Python 文件批量处理:重命名/备份/同步运维实战指南

老王在一家小公司管服务器。每天最烦的事&#xff0c;就是开发同事丢来一堆日志文件&#xff0c;文件名乱七八糟——有的叫log1.txt&#xff0c;有的叫1212.log&#xff0c;还有的直接叫新建文本文档(1).log。更糟的是&#xff0c;每周五要手动备份一遍配置文件&#xff0c;还得…...

告别fix bond/react:手写Python交联脚本,让你的LAMMPS聚合物模拟更精准

告别fix bond/react&#xff1a;手写Python交联脚本&#xff0c;让你的LAMMPS聚合物模拟更精准 在分子动力学模拟领域&#xff0c;聚合物交联过程的精确建模一直是科研人员面临的挑战。LAMMPS作为主流分子动力学软件&#xff0c;虽然提供了fix bond/create和fix bond/react等内…...

从地震预测到社交网络:Hawkes过程如何成为‘连锁反应’建模的瑞士军刀?

Hawkes过程&#xff1a;从地震余震到社交传播的连锁反应建模利器 想象一下&#xff0c;当你看到社交平台上某条内容突然爆红时&#xff0c;背后是否存在某种规律&#xff1f;或者当电商平台某个商品销量激增时&#xff0c;是否受到前期购买行为的影响&#xff1f;这些看似无关…...

**发散创新:基于Flink实时流处理的电商订单异常检测系统设计与实践**在现代电商场景中

发散创新&#xff1a;基于Flink实时流处理的电商订单异常检测系统设计与实践 在现代电商场景中&#xff0c;订单数据的实时性与准确性直接决定了用户体验和业务决策效率。传统的批处理方式已无法满足“秒级响应”的需求&#xff0c;而Apache Flink作为新一代流式计算引擎&#…...

MetaComputing AI PC with Framework Laptop 13 X OpenClaw系列二:Shopify订单统计

前情回顾&#xff1a;https://metacomputing.io/blogs/news/metacomputing-ai-pc-with-framework-laptop-13-openclaw-part-1-building-an-intelligent-discord-bot 上次使用OpenClaw打造了Discord智能聊天机器人&#xff0c;体验非常丝滑&#xff01;这次我们把OpenClaw和Sho…...