参考文档:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/template_matching/template_matching.html#id2

最近一直在做一个logo检测的项目,检测logo的有无,接触到模板匹配。模板匹配虽然精度不高,但选择恰当的方法,设置合适的阈值也能起到一定作用。有的时候我们还能用模板匹配来定位。下面对模板匹配进行一个总结。

模板匹配:模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术.

matchTemplate()参数详解

CV_EXPORTS_W void matchTemplate( InputArray image, InputArray templ,

OutputArray result, int method );

image:待匹配的源图像

templ:模板图像

result:保存结果的矩阵,我们可以通过minMaxLoc() 确定结果矩阵的最大值和最小值的位置.

minMaxLoc()函数:查找全局最小和最大稀疏数组元素并返回其值及其位置

void minMaxLoc(const SparseMat& a, double* minVal,double* maxVal, int* minIdx=0, int* maxIdx=0);

a: 匹配结果矩阵

&minVal 和 &maxVal: 在矩阵 result 中存储的最小值和最大值

&minLoc 和 &maxLoc: 在结果矩阵中最小值和最大值的坐标.

method :模板匹配的算法

有以下六种:

enum { TM_SQDIFF=0, TM_SQDIFF_NORMED=1, TM_CCORR=2, TM_CCORR_NORMED=3, TM_CCOEFF=4, TM_CCOEFF_NORMED=5 };

TM_SQDIFF,TM_SQDIFF_NORMED匹配数值越低表示匹配效果越好,其它四种反之。

TM_SQDIFF_NORMED,TM_CCORR_NORMED,TM_CCOEFF_NORMED是标准化的匹配,得到的最大值,最小值范围在0~1之间,其它则需要自己对结果矩阵归一化。

不同的方法会得到差异很大的结果,可以通过测试选择最合适的方法。

归一化函数normalize()

normalize( result, result, , , NORM_MINMAX, -, Mat() );

模板匹配的大致用法如下:

void templateMatching(const Mat& srcImage,const Mat& templateImage)

{

Mat result;

int result_cols = srcImage.cols - templateImage.cols + ;

int result_rows = srcImage.rows - templateImage.rows + ;

if(result_cols < || result_rows < )

{

qDebug() << "Please input correct image!";

return;

}

result.create(result_cols, result_rows, CV_32FC1);

// enum { TM_SQDIFF=0, TM_SQDIFF_NORMED=1, TM_CCORR=2, TM_CCORR_NORMED=3, TM_CCOEFF=4, TM_CCOEFF_NORMED=5 };

matchTemplate(srcImage,templateImage,result,TM_CCOEFF_NORMED); //最好匹配为1,值越小匹配越差

double minVal = -;

double maxVal;

Point minLoc;

Point maxLoc;

Point matchLoc;

minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());

//取大值(视匹配方法而定)

// matchLoc = minLoc;

matchLoc = maxLoc;

//取大值,值越小表示越匹配

QString str = "Similarity:" + QString::number((maxVal) * , 'f', ) + "%";

qDebug(str.toAscii().data());

Mat mask = srcImage.clone();

//绘制最匹配的区域

rectangle(mask, matchLoc, Point(matchLoc.x + templateImage.cols, matchLoc.y + templateImage.rows), Scalar(, , ), , , );

imshow("mask",mask);

}

分别采用两个不同颜色的模板图进行测试,得到如下两组结果图,以供参考。

测试结果1:

测试结果2:

Atitit opencv模板匹配attilax总结

Atitit opencv模板匹配attilax总结 找一幅图像的匹配的模板,可以在一段视频里寻找出我们感兴趣的东西,比如条形码的识别就可能需要这样类似的一个工作提取出条形码区域(当然这样的方法并不鲁 ...

opencv 模板匹配与滑动窗口(单匹配) &lpar;多匹配&rpar;

1单匹配: 测试图片:   code: #include #include #include

Scala进阶之路-Scala函数篇详解

Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

Atitit opencv 模板匹配

Atitit opencv 模板匹配 1.1. 图片1 1.2. Atitit opencv 模板匹配  6中匹配算法貌似效果区别不大1 1.3. 对模板缩放的影响 一般的缩放可以,太大了就歇菜了.. ...

MySQL UUID函数的详解&lpar;转&rpar;

MySQL UUID函数的详解 MySQL中可以有二类用于生成唯一值性质的工具:UUID()函数和自增序列,那么二者有何区别呢?我们就此对比下各自的特性及异同点: l  都可以实现生成唯一值的功能: ...

php正则表达式中preg&lowbar;match&lowbar;all函数的详解

php正则表达式中的函数我们之前为大家结果一个preg_match函数,相信大伙对此有所了解,那么php正则表达式中preg_match_all函数的具体使用是如何的呢?今天我们就带大家了解php正则 ...

关于Python正则表达式findall函数问题详解

关于Python正则表达式 findall函数问题详解 在写正则表达式的时候总会遇到不少的问题, 特别是在表达式有多个元组的时候.下面看下re模块下的findall()函数和多个表达式元组相遇的时候会 ...

高性能JavaScript模板引擎实现原理详解

这篇文章主要介绍了JavaScript模板引擎实现原理详解,本文着重讲解artTemplate模板的实现原理,它采用预编译方式让性能有了质的飞跃,是其它知名模板引擎的25.32 倍,需要的朋友可以参考 ...

自写函数VB6 STUFF函数 和 VB&period;net 2010 STUFF函数 详解

'*************************************************************************'**模 块 名:自写函数VB6 STUFF函数 和 ...

随机推荐

POJ2513——Colored Sticks&lpar;Trie树&plus;欧拉回路&plus;并查集&rpar;

Colored Sticks DescriptionYou are given a bunch of wooden sticks. Each endpoint of each stick is col ...

Python Socket,How to Create Socket Server&quest; - 网络编程实例

文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...

localStorge它storage事件

随着h5患病率和mobile发展.localStorage它不再是一个陌生的词汇.我相信大多数童鞋进行了联系,并用它.但storage事件相信有很多童鞋不清晰甚至没有接触.今天我们主要谈storage ...

backbone中get和fetch的区别

我也是刚开始接触backbone.js对于里面的很多东西都看过,但是具体在使用起来还是有很多问题,其中一个就是get和fetch的区别,这个让我很纠结,都是获取模型的数据,干嘛要有两个呢?最近好像弄明 ...

MiseringThread&period;java 解析页面线程

MiseringThread.java 解析页面线程 http://injavawetrust.iteye.com package com.iteye.injavawetrust.miner; imp ...

Python编程基础&lbrack;函数和面向对象&rsqb;(三)

Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也 ...

05&colon; jQuery

目录: jQuery参考网站 W3school 1.1 JQuery作用 1.2 jQuery与DOM比较 与 相互转换 1.3 jQuery选择器 1.4 jQuery筛选与过滤 1.5 jQuer ...

删除排序数组中的重复数字 II &&num;183&semi; Remove Duplicates from Sorted Array II

重复一次 [抄题]: 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度. 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成. [思维问题]: [ ...

shutil的一些基本用法

import shutil import time import tarfile # 将文件内容拷贝到另一个文件中 shutil.copyfileobj(open('a1', 'r'), open(' ...

网络文学带动的IP热

网络文学从最初被人诟病不入流到现今直接带动整个网络文学产业链发展以及IP热,其发展历程如何?现今布局如何?以下做简单概括. 下图为艾瑞PC指数文学网站排名,由图可看出晋江原创网排名首位. 晋江隶属盛大 ...

matlab opencv模板匹配算法,OpenCV模板匹配函数matchTemplate详解相关推荐

  1. opencv java match_OpenCV模板匹配函数matchTemplate详解

    参考文档:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/template_matchin ...

  2. OpenCV3学习(8.3)模板匹配函数matchTemplate详解

    opencv实现了一部分通过模板与目标图像进行寻找最佳匹配的方面matchTemplat();这个方法网上有很多讲解,基本思想是将模板图像在目标图像上滑动逐一对比,通过统计的基本方法进行匹配,比如方差 ...

  3. 【OpenCV3】模板匹配——cv::matchTemplate()详解

    模板匹配通常被用于目标检测.相似度分析中,opencv2和opencv3中提供了一个专门用于模板匹配的函数--cv::matchTemplate(),下面就对该函数进行详细的介绍. 先从一个实际的例子 ...

  4. matlab fgetc,C语言fgetc和fputc函数用法详解(以字符形式读写文件)

    在C语言中,读写文件比较灵活,既可以每次读写一个字符,也可以读写一个字符串,甚至是任意字节的数据(数据块).本节介绍以字符形式读写文件. 以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件 ...

  5. OpenCV函数remap详解

    OpenCV函数remap详解 remap的作用是将原影像映射到目标影像的函数. 这是OpenCV文档中的说明. 但这个描述给人的感觉是,云里雾里,到底是需要计算目标到原的映射关系,还是原到目标的映射 ...

  6. OpenCv中的cv::Mat::create()函数,cvRound(),cvFloor(),cvCeil()函数的详解l

    文件说明: cv::create()函数的详解 函数原型: inline void Mat::create(int _rows, int _cols, int _type) inline void M ...

  7. OpenCV实战(16)——角点检测详解

    OpenCV实战(16)--角点检测详解 0. 前言 1. Harris 特征检测器 1.1 检测 Harris 角点 1.2 cv::cornerHarris 函数参数 2. 可追踪的良好特征 3. ...

  8. matlab melbankm,Matlab v_melbankm函数参数详解(英文附例)

    Matlab v_melbankm函数参数详解(英文附例) 笔者使用的是R2019的matlab,下载了voicebox安装至matlab路径下即可使用.下载voicebox请参看此博客 需要注意的是 ...

  9. Matlab mfcc函数参数详解(英文附例)

    Matlab mfcc函数参数详解 其实可以直接打开源代码看哈. %MFCC Extract the mfcc, log-energy, delta, and delta-delta of audio ...

  10. Matlab v_melcepst函数参数详解(英文附例)

    Matlab v_melcepst函数参数详解(英文附例) 笔者使用的是R2019的matlab,下载了voicebox安装至matlab路径下即可使用.下载voicebox请参看此博客 需要注意的是 ...

最新文章

  1. jquery插件:图片上传按比例预览
  2. php cannot find libz,brew安装php70出现configure: error: Cannot find libz 错误解决方法
  3. 动物模型:急性肝脏损伤模型的构建及选择
  4. Quartz.NET 架构与源代码分析系列 part 2 :Job 作业
  5. 关于如何在Python中使用静态、类或抽象方法的权威指南
  6. 建立一颗二叉排序树,并删除该二叉排序树上的某个节点
  7. 为ASP.NET封装的SQL数据库访问类(转)
  8. 新品Demo —— ZStack Mini 超融合一体机
  9. 【缺陷检测】基于matlab GUI计算机视觉缺陷检测系统【含Matlab源码 1845期】
  10. python逻辑型数据也叫布尔值_【python系统学习10】布尔值
  11. 万年历我java输出实现_用java实现简单的万年历输出的代码
  12. qt 实现MVC Api控制器开发 web api接口-连载【5】-企业级系统开发实战连载系列 -技术栈(vue、element-ui、qt、c++、sqlite)
  13. uniapp——显示不了网络图片或者本地图片
  14. HydroGo-Pre 水动力学模型建模统一前处理系统使用说明
  15. CondaUpgradeError: This environment has previously been operated on by a conda version that‘s newer
  16. 520快到了,给你对象写个怦然心动吧
  17. maven java版本过低_maven项目编译运行时提示jdk版本过低问题解决方法
  18. php中控制段落的行距,CSS段落间距调整 P标签段落距离如何设置
  19. 120个微信小程序源码,打包下载
  20. LNMP架构的搭建——源码编译(PHP,nginx,Mysql)

热门文章

  1. c语言中文件的四种读取方法
  2. 高德地图JSAPI点位相关操作
  3. 生信常用分析图形绘制02 -- 解锁火山图真谛!
  4. html预览pdf上的电子印章,移动端pdf预览-水印电子签章问题
  5. SpringBoot2.0学习第四篇之拦截器过滤器配置
  6. journalctl命令详解,与如何查看系统日志
  7. 手把手教你将小米手机刷机!
  8. Modbus转Profinet网关连接英威腾变频器方法
  9. icomoon图标字体的下载与使用
  10. 项目管理十大知识领域之项目范围管理