如何使用 OpenCV(模板匹配)检测和匹配标记

2023-11-29

我正在使用在特定区域包含标记的图像。我尝试使用模板匹配来做到这一点,这是 opencv 中定义为 cv MatchTemplate 的方法。

我正在使用网络摄像头来检测它们,当前程序正在检测标记,因为我提供了与模板相同的标记。

但我找不到一种方法来检查它是否是最佳匹配或只是稍微匹配。因为在 cvMatchTemplate 中,它不仅检测最佳匹配,还不断检测稍微匹配的区域。

谁能告诉我一种方法来做到这一点。或者如果有其他方法可以解决我的问题,请告诉我!

这是我的图像卡的链接http://imageshack.us/photo/my-images/266/piggycard.jpg/(我想检测并检查它是否匹配)

这是代码

// template_mching_test_2.cpp :定义控制台应用程序的入口点。 //

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

int main()
{   
IplImage* imgOriginal = cvLoadImage("D:\\4Yr\\Research\\SRS\\Animations\\Piggycard.jpg", 0);
IplImage* imgTemplate = cvLoadImage("D:\\4Yr\\Research\\MakingOf\\Sample Imageas\\PiggyMarkerStart.jpg", 0);

CvCapture *cap = cvCaptureFromCAM(0);

if(!cap)
return -1;

cvNamedWindow("result");

IplImage* imgOriginal;
IplImage* imgOriginal2;
IplImage* imgResult;

while(true)
{
imgOriginal = cvQueryFrame(cap);//cvCreateImage(cvSize(imgOriginal->width-imgTemplate->width+1, imgOriginal->height-imgTemplate->height+1), IPL_DEPTH_32F, 1);
imgOriginal2 = cvCreateImage(cvSize(imgOriginal->width,imgOriginal->height),imgOriginal->depth,1);
imgResult = cvCreateImage(cvSize(imgOriginal->width-imgTemplate->width + 1,imgOriginal->height-imgTemplate->height+1),IPL_DEPTH_32F,1);

cvZero(imgResult);
cvZero(imgOriginal2);

cvCvtColor(imgOriginal,imgOriginal2,CV_BGR2GRAY);
cvMatchTemplate(imgOriginal2, imgTemplate, imgResult,CV_TM_CCORR_NORMED);

double min_val=0, max_val=0;
CvPoint min_loc, max_loc;
cvMinMaxLoc(imgResult, &min_val, &max_val, &min_loc, &max_loc);

cvRectangle(imgOriginal, max_loc, cvPoint(max_loc.x+imgTemplate->width,  max_loc.y+imgTemplate->height), cvScalar(0), 1);
printf("%f \n", max_val);

cvShowImage("result", imgOriginal);

cvWaitKey(10);

cvReleaseImage(&imgOriginal2);
cvReleaseImage(&imgResult);
}

cvDestroyAllWindows();
cvReleaseCapture(&cap);

return 0;

}

作为模板,我提供了从原始图像中裁剪的相同标记。我从 minMaxLoc 中取出最大值来检查最佳匹配。但当图像标记位于某个位置时,并且当图像标记不在框架中并且在先前与标记匹配的位置稍微匹配时,它会一直给我相同的值。 minMaxloc 是否为我们提供了坐标(位置)标记或匹配百分比。或者还有其他方法吗? 谢谢您的考虑。


有一个关于模板匹配主题的 OpenCV 教程.

Using 匹配模板是一个好的开始,它将为您提供一个包含与您的匹配指标相关的数字的图像(该指标有一系列选择,其中一些提供较高的数字以获得更好的匹配,有些提供较低的数字)。

要随后选择最佳匹配,您还需要使用该函数最小最大位置它可以找到该矩阵的最小值和最大值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 OpenCV(模板匹配)检测和匹配标记 的相关文章

随机推荐

  • 优化INSERT/UPDATE/DELETE操作

    我想知道是否可以以某种方式优化以下脚本 它确实向磁盘写入了大量数据 因为它删除了可能是最新的行并重新插入它们 我正在考虑应用诸如 在重复键更新时插入 之类的内容 并发现了单行更新的一些可能性 但我不知道如何在以下上下文中应用它INSERT
  • Firebase 数据库复制

    我需要来自 2 个 iOS 应用程序 具有不同捆绑名称 中的一个 Firebase 项目数据库的数据 所以 问题是 是否可以在 2 个不同的 Firebase 项目数据库之间配置复制 或者是否可以将 1 个 Firebase 项目 1 个数
  • TIBCO EMS 服务器是否管理重新连接?或者客户呢?

    TIBCO EMS NET 参考指南说 第 134 页 要启用重新连接行为和容错功能 serverURL 参数必须是两个或多个 URL 的逗号分隔列表 在只有一台服务器的情况下 您可以提供该服务器 URL 的两个副本以启用客户端重新连接 例
  • Python 向下舍入到自定义步骤

    我们有一个部分工作的代码和 2 个具有不同类型的自定义步骤的示例 示例 2 Int 有效 而示例 1 则无效 因为它是向上舍入而不是向下舍入 import math def step size to precision ss return
  • 涉及 char 数组的 C 语句的含义

    我正在为一个项目开发一种算法 并且遇到了一些我认为可能有用的代码 然而 当我尝试阅读代码时 我在理解代码中的语句时遇到了一些困难 这是代码 int firstWord MAX WORD SIZE 0 c 0 while word1 c 0
  • 使用 Vanilla Javascript 检测滚动以帮助更改导航 CSS [重复]

    这个问题在这里已经有答案了 我试图检测页面上的滚动是否超过高度为 80 像素的固定顶部导航的 100 像素 计划是 一旦用户的滚动超过上述 100 像素 导航栏将更改背景颜色 我看过很多关于这个主题的教程 但我看到的所有教程都是使用 Jqu
  • 在元素上使用重复的类名?

    我发现有很多框架会在元素上添加新类名之前检查重复的类名 我认为这会降低性能 当元素有重复的类名时会出现问题吗 当使用重复的类名时 它还会应用 CSS 类 而不会发生冲突 div class aa bb cc aa div 可以简单地添加一个
  • 创建计算器(JS)

    我有一条线calc 2 add 3 add 5 res 并需要写一个解决方案 以便我有10因此 我试过这个 class Calc constructor num this num num add a this num a return th
  • 带有自定义滚动条的自动完成 jquery UI 插件

    有人尝试为 jquery UI 自动完成小部件制作自定义滚动条吗 我正在尝试将 jScrollPane jquery 组件与自动完成小部件结合使用 但到目前为止没有取得任何成功 如果有人知道一些带有自定义滚动条的 jquery 自动完成组件
  • 将循环放入 C 宏中

    我正在寻找一种将以下函数结构转换为宏的方法 我知道 这是一个愚蠢且毫无意义的例子 但它说明了这一点 因为我无法给出我的实际源代码 int foo int x int y do x y while x gt y return x y note
  • 使用新数据重新渲染漏斗高图

    我在 MVC3 应用程序中使用 highcharts 并且在数据修改后尝试刷新 但图表不刷新 我绘制的图表如下 function initializeChart chart1 new Highcharts Chart chart rende
  • 使用 Apache FTPClient 检索文件时如何保留修改日期?

    我在用org apache commons net ftp FTPClient用于从 ftp 服务器检索文件 当文件保存在我的计算机上时 保留文件上最后修改的时间戳至关重要 有人对如何解决这个问题有建议吗 这就是我解决它的方法 public
  • 不正确的位图复制/输出

    因此 我在尝试读取任何 24bpp 位图图像并在同一文件夹中重新创建它时 无法准确弄清楚到底出了什么问题 它适用于一张图像 但不适用于我测试过的其他两张图像 从位图中读取时 我使用标头本身中找到的信息 可以说我有三个问题 1 我是否正确读取
  • Maven 通配符匹配部分文件夹名称

    使用 maven clean plugin 我想删除所有以 tmp 开头的文件夹 Maven 通配符可以吗 我努力了
  • 该程序创建了多少个进程,包括初始父进程?

    我试图弄清楚该程序创建了多少个进程 包括初始父进程 正确答案应该是9 但是我不明白为什么答案是9 这9个进程是如何创建的 提前致谢 include
  • 是否有有效的跨域 iframe 高度自动调整器?

    我尝试了一些解决方案但没有成功 我想知道是否有一个解决方案 最好有一个易于遵循的教程 您有三种选择 1 使用iFrame调整器 这是一个简单的库 用于保持 iFrame 的大小适合其内容 它使用 PostMessage 和 Mutation
  • 为应用程序制作密码锁?

    我想为我的应用程序制作一个密码解锁屏幕 但我不确定如何去做 我希望它看起来像苹果设计的版本 即密码锁定设置屏幕 我该如何做这样的事情 一旦输入所有四位数字 代码就会立即与预设密码进行检查 Thanks 刚刚找到一个可以完美复制这一点的项目
  • J2ME 与 Sqlite

    J2me的移动应用程序是否有像SQLite这样的持久存储 如果有 请分享链接或一些示例代码 使简单的 J2ME 应用程序与后端持久数据库进行交互 是的 J2ME 有持久存储 称为 RMS MIDP 2 0 的一部分 看这里简短的教程 RMS
  • 旋转前后的 OpenGL 平移

    以下是代码 摘自http www glprogramming com red chapter03 html 关于如何绘制机器人的手臂和肩膀并通过一些用户输入旋转它们 glPushMatrix glTranslatef 1 0 0 0 0 0
  • 如何使用 OpenCV(模板匹配)检测和匹配标记

    我正在使用在特定区域包含标记的图像 我尝试使用模板匹配来做到这一点 这是 opencv 中定义为 cv MatchTemplate 的方法 我正在使用网络摄像头来检测它们 当前程序正在检测标记 因为我提供了与模板相同的标记 但我找不到一种方