opencv关于模板匹配cvMatchTemplate的运用
来源:互联网 发布:阿里云华东1是哪里 编辑:程序博客网 时间:2024/05/23 16:55
首先,参看上图。假设褐色的大图为待测图片,红色小图为模板图片。
1.result中数据的含义。
模板匹配函数cvMatchTemplate依次计算模板与待测图片的重叠区域的相似度,并将结果存入映射图像result当中,也就是说result图像中的每一个点的值代表了一次相似度比较结果。
2.result的尺寸大小。
如图可知,模板在待测图像上每次在横向或是纵向上移动一个像素,并作一次比较计算,由此,横向比较W-w+1次,纵向比较H-h+1次,从而得到一个(W-w+1)×(H-h+1)维的结果矩阵,result即是用图像来表示这样的矩阵,因而图像result的大小为(W-w+1)×(H-h+1)。
3.如何result中获得最佳匹配区域
使用函数cvMinMaxLoc(result,&min_val,&max_val,&min_loc,&max_loc,NULL);从result中提取最大值(相似度最高)以及最大值的位置(即在result中该最大值max_val的坐标位置max_loc,即模板滑行时左上角的坐标,类似于图中的坐标(x,y)。)
由此得到:rect=cvRect(max_loc.x,max_loc.y,tmp->width,tmp->height);rect表示的矩形区域即是最佳的匹配区域。
cvMatchTemplate: 比较模板和重叠的图像区域
函数原型:void cvMatchTemplate( const CvArr* image, const CvArr* templ, CvArr* result, int method );
- image:欲搜索的图像。它应该是单通道、8-比特或32-比特 浮点数图像
- templ:搜索模板,不能大于输入图像,且与输入图像具有一样的数据类型
- result:比较结果的映射图像。单通道、32-比特浮点数. 如果图像是 W×H 而 templ 是 w×h ,则 result 一定是 (W-w+1)×(H-h+1).
method:指定匹配方法:
CV_TM_SQDIFF :平方差匹配法,最好匹配为0。匹配越差,匹配值越大。
CV_TM_CCORR:相关匹配法,采用模板和图像之间的乘法操作,所以较大的数表示匹配程度较高,0表示最坏的匹配效果。
CV_TM_CCOEFF :相关匹配法,将模板对其均值的相对值与图像对其均值的相对值进行匹配,1表示完美的匹配,-1表示最糟糕的匹配,0表示没有任何相关性(随机序列)。
归一化方法:
CV_TM_SQDIFF_NORMED
CV_TM_CCORR_NORMED
CV_TM_CCOEFF_NORMED
通常,随着从简单的测量(平方差)到更复杂的测量(相关系数),我们可获得越准确的匹配(同时也意味着越来越大的计算代价)。最后的方法就是对所有这些设置多做一些测试实验,以便自己的应用选择同时兼顾速度和精度的最佳方案。
-----------------------------------------------------------------------------------------------
- 效果图如下:原图: 匹配模板:
- 匹配结果:
程序源码如下:
#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
#include <stdio.h>
using namespace std;
int main() {
IplImage *src, *temp1, *ftmp;
if ((src = cvLoadImage("f.jpg", 1)) == 0) {
return -1;
}
if ((temp1 = cvLoadImage("part_eye.jpg", 1)) == 0) {
return -1;
}
int iwidth = src->width - temp1->width + 1;
int iheight = src->height - temp1->height + 1;
ftmp = cvCreateImage(cvSize(iwidth, iheight), 32, 1);
double min_val;
double max_val;
CvPoint min_loc;
CvPoint max_loc;
cvMatchTemplate(src, temp1, ftmp, 0);
cvMinMaxLoc(ftmp, &min_val, &max_val, &min_loc, &max_loc, NULL);
cvRectangle(src, cvPoint(min_loc.x, min_loc.y),
cvPoint((min_loc.x + temp1->width),(min_loc.y + temp1->height)), CV_RGB(0,255,0), 1);
cvNamedWindow("src",1);
cvShowImage("src",src);
cvSaveImage("result1.bmp",src);
cvWaitKey(0);
return 0;
}
我选择了一张明星都敏俊教授的图片作为原图模型,然后选择眼睛部位作为匹配的模板进行匹配,最后能匹配的效果非常好。这个实验对人脸识别,车辆检测,视频监控具有重要的意义。
- opencv关于模板匹配cvMatchTemplate的运用
- opencv 模板匹配(cvMatchTemplate)
- opencv 模板匹配(cvMatchTemplate)
- opencv中cvMatchTemplate模板匹配
- Opencv的cvMatchTemplate模板匹配根据阈值判断匹配
- OpenCV中的模板匹配函数:cvMatchTemplate
- cvMatchTemplate() 模板匹配
- Opencv模板匹配运用
- OpenCV的cvMatchTemplate用法
- 关于cvMatchTemplate的method
- 模板匹配函数cvMatchTemplate中的…
- 模板匹配函数cvMatchTemplate中的…
- 模板匹配函数cvMatchTemplate中的…
- 模板匹配函数cvMatchTemplate中的…
- opencv的模板匹配
- 第七章 - 直方图与匹配 - 模板匹配(cvMatchTemplate)
- OpenCV 中的 cvMatchTemplate() 的使用举例
- OpenCV 中的 cvMatchTemplate() 的使用举例
- IOS 开发学习29 Socket框架 AsynSocket的使用
- MVC5+Mql+EF框架搭建
- openwrt 编译时提示缺少libstdc++,libpthread.so.0文件
- socket接口使用原理
- 穿透Session 0 隔离(二)
- opencv关于模板匹配cvMatchTemplate的运用
- JavaScript设计模式与开发实践——JavaScript的多态
- Eclipse创建Maven web项目流程
- Hadoop运行jar包,提示ClassNotFoundException
- 数据类型
- JS正则表达式大全
- NSURLConnection 异步下载图片
- Sparse Autoencoder(1) -----Neural Networks
- 14 个 grep 命令的例子