机器视觉5 检测原理之视觉定位

在机器视觉检测中有一个非常重要的流程就是定位,检测区准确的检测效果的基础是精确的定位。以下是关于OpenCV中matchTemplate检测的详细说明,包括其原理、使用方法和应用场景。

1. matchTemplate 的原理

模板匹配的基本原理是通过滑动模板图像与源图像的每一个子区域进行比较,计算模板与子区域之间的相似度。滑动模板的方式类似于卷积操作。不同的匹配方法使用不同的相似度度量:

  • 平方差 (Sum of Squared Differences, SSD): 计算模板与子区域像素之间差的平方和。
  • 相关匹配 (Cross-Correlation, CC): 计算模板与子区域像素的相关性。
  • 相关系数 (Correlation Coefficient, CCOEFF): 对模板和子区域进行均值归一化后再计算相关性,减小亮度差异的影响。

匹配结果存储在一个矩阵中,矩阵中的每个值代表模板在对应位置与图像子区域的相似度。不同的匹配方法会有不同的极值(如平方差匹配时,值越小越好;相关匹配时,值越大越好)。

2. matchTemplate 的函数原型

void matchTemplate(InputArray image, InputArray templ, OutputArray result, int method);

  • image: 源图像。
  • templ: 模板图像。
  • result: 输出结果矩阵,存储匹配的相似度值。
  • method: 匹配方法(详见后面说明)。

3. 常用的匹配方法

OpenCV 提供了6种不同的匹配方法,具体如下:

  • cv::TM_SQDIFF: 平方差匹配法,结果值越小表示越相似。
  • cv::TM_SQDIFF_NORMED: 归一化的平方差匹配法,结果值越接近0表示越相似。
  • cv::TM_CCORR: 相关匹配法,结果值越大表示越相似。
  • cv::TM_CCORR_NORMED: 归一化的相关匹配法,结果值越接近1表示越相似。
  • cv::TM_CCOEFF: 相关系数匹配法,结果值越大表示越相似。
  • cv::TM_CCOEFF_NORMED: 归一化的相关系数匹配法,结果值越接近1表示越相似。

4. matchTemplate 的使用方法

下面是一个C++的使用示例:

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main() {// 读取源图像和模板图像Mat image = imread("image.jpg");Mat templateImg = imread("template.jpg");if (image.empty() || templateImg.empty()) {cout << "图像读取失败!" << endl;return -1;}// 创建结果矩阵,用于保存匹配结果Mat result;matchTemplate(image, templateImg, result, TM_CCOEFF_NORMED);// 找到匹配位置double minVal, maxVal;Point minLoc, maxLoc;minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc);// 使用最大值作为最佳匹配位置Point matchLoc = maxLoc;// 在源图像上绘制矩形rectangle(image, matchLoc, Point(matchLoc.x + templateImg.cols, matchLoc.y + templateImg.rows), Scalar(0, 255, 0), 2);// 显示结果imshow("Detected", image);waitKey(0);return 0;
}

5. minMaxLoc 函数

minMaxLoc 函数用于在结果矩阵中找到最大值或最小值(具体取决于匹配方法)。该函数的作用是找到最优匹配的位置:

void minMaxLoc(InputArray src, double* minVal, double* maxVal, Point* minLoc, Point* maxLoc);

  • minVal:最小值。
  • maxVal:最大值。
  • minLoc:最小值的位置。
  • maxLoc:最大值的位置。

不同的匹配方法返回的极值有所不同:

  • 对于 TM_SQDIFF 和 TM_SQDIFF_NORMED,匹配的最佳位置是最小值。
  • 对于其他方法,匹配的最佳位置是最大值。

6. 应用场景

模板匹配的应用场景通常是在已知目标形状的情况下寻找目标。典型应用场景包括:

  • 对象检测:在图像中寻找一个已知形状的物体,例如在制造业中的产品检测、零件识别等。
  • 图像配准:在不同视角或不同帧中寻找相同的目标,用于图像对齐或视频稳定等。
  • 图像识别:在多张图像中寻找预定义的模板,例如商标检测、人脸识别等。
  • 实时跟踪:在视频中实时跟踪特定的对象,如体育赛事中的球体跟踪、汽车跟踪等。

7. 优缺点

优点:
  • 简单易用matchTemplate 是基于像素强度的模板匹配方法,相比复杂的特征匹配方法实现简单。
  • 适合已知形状匹配:在图像清晰、无噪声、亮度均匀的条件下,可以取得较好的效果。
缺点:
  • 对旋转、缩放不敏感:模板匹配对旋转、尺度变化非常敏感,若目标在图像中有旋转或缩放,则匹配效果会显著下降。
  • 受光照影响:亮度变化会影响模板匹配的结果。
  • 计算量大:在大图像中滑动模板会消耗大量的计算资源,尤其是大模板图像时。

8. 进阶方法

如果 matchTemplate 无法满足应用需求(如处理旋转、缩放等变化),可以采用以下进阶方法:

  • 多尺度模板匹配:在不同的尺度下进行模板匹配,可以处理目标的尺度变化。
  • 特征匹配算法:如 SIFT、SURF、ORB 等,可以处理旋转、缩放、亮度变化等复杂情况。
  • 深度学习方法:卷积神经网络(CNN)等深度学习技术可以用于更加复杂的图像匹配任务。

9. 总结

OpenCV 的 matchTemplate 函数是进行图像模板匹配的基本工具,适用于简单的匹配任务。它易于实现且具有一定的稳定性,但对旋转、缩放等复杂情况不敏感。在需要更高精度和鲁棒性的场景下,可以结合特征匹配算法或深度学习方法。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Zabbix 6.4添加中文语言

/usr/share/zabbix/include/locales .inc .phplocale -agrep “zh_CN" yum install langpacks-zh_CN.noarch y y y

浅谈死锁以及判断死锁的方法

引言 我们在并发情况下见过很多种锁&#xff0c;synchronized&#xff0c;ReentrantLock 等等&#xff0c;这些锁是为了保证线程安全&#xff0c;使线程同步的锁&#xff0c;与今天所要学习的死锁并不相同&#xff0c;死锁并不是一种锁&#xff0c;而是一种现象。 官方定义&a…

【CTF Reverse】XCTF GFSJ1101 Mine- Writeup(反编译+动态调试+Base58编码)

Mine- 运气怎么这么差&#xff1f; 原理 Base58 Base58是用于比特币&#xff08;Bitcoin&#xff09;中使用的一种独特的编码方式&#xff0c;主要用于产生Bitcoin的钱包地址。 相比Base64&#xff0c;Base58不使用数字"0"&#xff0c;字母大写"O"&…

想要监控电脑?这十款电脑监控软件推荐!

在选择电脑监控软件时&#xff0c;重要的是要明确你的监控目的&#xff0c;并确保所选软件符合法律法规和道德标准。以下是我为你推荐的十款电脑监控软件&#xff0c;它们各自具有不同的特点和功能&#xff0c;适用于不同的场景和需求&#xff1a; 1.安企神&#xff1a; 作为…

从混乱到清晰!借助Kimi掌握螺旋型论文结构的秘诀!

AIPaperGPT&#xff0c;论文写作神器~ https://www.aipapergpt.com/ 写学术论文有时会让人感到头疼&#xff0c;特别是在组织结构和理清思路时&#xff0c;往往觉得无从下手。 其实&#xff0c;找到合适的结构不仅能帮你清晰地表达研究成果&#xff0c;还能让你的论文更有说…

数据建模无法满足复杂业务需求?别慌,数据开发平台可以完美互补!

前言 数据可视化建模无论是对于企业的数字化转型&#xff0c;还是对数据资源的价值开发来说&#xff0c;都是至关重要的工具&#xff0c;小兵在前文《数据可视化建模平台介绍》。中有详细介绍过他的能力&#xff0c;包括面向多源异构的企业数据&#xff0c;为企业提供数据集成…

PCL 读取txt格式点云并可视化

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xff09; 一、概述 1.1原理 TXT格式的点云文…

4.5 pandas 实战 分析抖音播放数据(1)

课程目标 基于pandas对抖音播放数据做数据分析 数据准备 点此去下载 课程内容 导包 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns plt.rcParams["font.family"] "SimHei" plt.rcParams["ax…

焦化行业的变革力量:智能巡检机器人

根据相关数据&#xff0c;2024年1-2月份&#xff0c;焦炭产量为8039.5万吨&#xff0c;同比增长2.1%&#xff0c;这表明&#xff0c;我国焦化行业仍是全球最大的焦炭生产国和消费国&#xff0c;其市场规模占据了重要地位。焦化企业主要集中在山西省&#xff0c;其合计焦炭产能约…

c++的decltype关键字

它可以将变量声明为表达式指定的类型

Hash入门

unordered_set void test_unordered_set() {unordered_set<int> us;us.insert(4);us.insert(2);us.insert(1);us.insert(5);us.insert(6);us.insert(2);us.insert(2);//去重unordered_set<int>::iterator it us.begin();while (it ! us.end()){cout << *it…

MyBatis-Plus代码一键生成

官网地址&#xff1a;MyBatis-Plus &#x1f680; 为简化开发而生 开始&#xff1a; 添加依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.7</version&g…

IMS 在线计费 IMS 离线计费

目录 1. IMS 在线计费 1.1 主要内容 1.2 IMS 在线计费架构 ​编辑1.3 IMS 在线计费方案 1.4 IMS 在线计费的关键步骤 1.5 在线计费的基本流程 1.6 IMS Information AVP 2. IMS 离线计费 2.1 IMS 离线计费架构 2.2 IMS 离线计费概述 2.3 什么时候 AS 给 CG 发送 ACR?…

独立站技能树/工具箱1.0 总纲篇丨出海笔记

正所谓要把一件事做到90分很难&#xff0c;但做到60分基本上照着SOP做到位都没问题&#xff0c;如果我们能把每件事都做到60分&#xff0c;那绝对比至少60%的人都强&#xff0c;除非你的对手不讲武德——那就是他很可能看了我这篇文章&#xff0c;不但每方面都超过及格线&#…

油耳拿什么清理比较好?比较推荐哪种可视耳勺

相信很多小伙伴都有挖耳朵方面的困扰&#xff0c;尤其是油性耳朵的人&#xff0c;用棉签掏耳朵时感觉越掏越往里去&#xff0c;而使用普通耳勺又因为材质过硬&#xff0c;在使用过程中容易刮伤耳道。于是市面上出现了可视挖耳勺&#xff0c;让人们可以在看得见的情况下取出耳道…

解决novnc1.2.0不能使用剪切板的问题

1.下载资源文件asciidef.js,在rfb.js中引入 2.修改rfb.js中clipboardPasteFrom方法如下 clipboardPasteFrom(text) {if (this._rfbConnectionState !== connected || this._viewOnly) {return; }if (this._clipboardServerCapabilitiesFormats[extendedClipboardFormatText] &…

MT6765/MT6762(R/D/M)/MT6761(MT8766)安卓核心板参数比较_MTK联发科4G智能模块

联发科Helio P35 MT6765安卓核心板 MediaTek Helio P35 MT6765是智能手机的主流ARM SoC&#xff0c;于2018年末推出。它在两个集群中集成了8个ARM Cortex-A53内核&#xff08;big.LITTLE&#xff09;。四个性能内核的频率高达2.3GHz。集成显卡为PowerVR GE8320&#xff0c;频率…

研发企业的源代码防泄密秘籍:一机两用的沙盒电脑

在数字化时代&#xff0c;数据安全已成为企业最关注的问题之一。尤其是对于研发密集型企业&#xff0c;源代码的安全更是核心资产。SDC沙盒&#xff0c;正是为了应对这一挑战而设计的先进数据防泄密解决方案。 全面保护&#xff0c;从源头开始 SDC沙盒采用独特的代码级安全设…

python线程(python threading模块、python多线程)(守护线程与非守护线程)

文章目录 Python多线程入门1. Python多线程概述2. threading模块基础- Thread 类: 这是一个代表线程的类。可以通过创建Thread类的实例来新建一个线程。- Lock 类: 在多线程环境中&#xff0c;为了防止数据错乱&#xff0c;通常需要用到锁机制。Lock类提供了基本的锁功能&#…

如日中天的AI大模型,也到了发展幻灭期!

近期 Gartner发布了《新兴技术成熟度曲线》&#xff0c;其中生成式 AI &#xff08;GenAI&#xff09; 正式进入到了幻灭期。 2018 年 6 月&#xff0c;OpenAI发布GPT-1模型&#xff0c;生成式AI开始向产品化发展。 到2022年的GPT-3.5发布&#xff0c;并且ChatGPT首次向公众推…