opencv 模板匹配(cvMatchTemplate)

原创 2015年04月27日 19:43:48

opencv 模板匹配(cvMatchTemplate)   

       模板匹配是通过在输入图像上滑动模板图像块对实际的图像块和输入图像进行匹配,并且可以利用函数cvMinMaxLoc()找到最佳匹配的位置。例如在工业应用中,可以锁定图像中零部件的位置,并根据具体的位置,进行具体的处理。匹配的过程中可以使用不同的method,通过最合适的method,进行最合适的匹配。


MatchTemplate

      比较模板和重叠的图像区域

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   指定匹配方法:

       函数 cvMatchTemplate 与函数 cvCalcBackProjectPatch 类似。它滑动过整个图像 image, 用指定方法比较 templ 与图像尺寸为 w×h 的重叠区域,并且将比较结果存到 result 中。 下面是不同的比较方法,可以使用其中的一种 (I 表示图像,T - 模板, R - 结果. 模板与图像重叠区域 x'=0..w-1, y'=0..h-1 之间求和):


OpenCV模板匹配算法.可用的方法有6个:


平方差匹配method=CV_TM_SQDIFF,这类方法利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大.

标准平方差匹配method=CV_TM_SQDIFF_NORMED

相关匹配method=CV_TM_CCORR,这类方法采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果.


标准相关匹配method=CV_TM_CCORR_NORMED

相关系数匹配method=CV_TM_CCOEFF。这类方法将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列).

在这里

标准相关系数匹配method=CV_TM_CCOEFF_NORMED





     通常,随着从简单的测量(平方差)到更复杂的测量(相关系数),我们可获得越来越准确的匹配(同时也意味着越来越大的计算代价).最好的办法是对所有这些设置多做一些测试实验,以便为自己的应用选择同时兼顾速度和精度的最佳方案.

       通过使用 cvMinMaxLoc函数,我们确定结果矩阵 R 的最大值和最小值的位置。函数中的参数有:

double minVal; double maxVal; Point minLoc; Point maxLoc;
Point matchLoc;
minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );
    result: 匹配结果矩阵
    &minVal 和 &maxVal: 在矩阵 result 中存储的最小值和最大值。该值是矩阵中的最大值和最小值。
    &minLoc 和 &maxLoc: 在结果矩阵中最小值和最大值的坐标.
    Mat(): 可选的掩模



代码如下(输出待寻找模板的位置坐标,以及相似度值):

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <string>

using namespace cv;
using namespace std;

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h>

int main(int argc, char** argv)
	{
	    IplImage *src, *temp1, *ftmp;
			//读入模板图像  
			temp1 = cvLoadImage(argv[1], 1);
			//读入源图像  
			src = cvLoadImage(argv[2], 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, CV_TM_SQDIFF);
	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);
	printf("x_location=%d;y_location=%d", min_loc.x, min_loc.y);
	printf("min_val=%d;max_val=%d", min_val, max_val);
	cvWaitKey(0);

	return 0;
}


待搜寻的图:




OpenCV的cvMatchTemplate用法

首先,参看上图。假设褐色的大图为待测图片,红色小图为模板图片。        1.result中数据的含义。        模板匹配函数cvMatchTemplate依次计算模板与待测图片...
  • sundy_2004
  • sundy_2004
  • 2012年07月15日 18:06
  • 17128

第七章 - 直方图与匹配 - 模板匹配(cvMatchTemplate)

模板匹配是通过在输入图像上滑动模板图像块对实际的图像块和输入图像进行匹配,应用场景:比如要在一堆图像中寻找指定人脸,就可以利用此算法在图像中找到此人脸的最佳匹配,确定相似度。并且可以利用函数cvMin...
  • hitwengqi
  • hitwengqi
  • 2011年10月28日 16:18
  • 20152

OpenCV 中的 cvMatchTemplate() 的使用举例

 本文作者:longlongago     博客地址:http://blog.csdn.net/longlongago2000在学习OpenCV,很辛苦才找到相关的例子,在这里共享给大家,这里是在加入...
  • longlongago2000
  • longlongago2000
  • 2008年03月15日 22:51
  • 3145

opencv关于模板匹配cvMatchTemplate的运用

模板匹配是通过在输入图像上滑动模板图像块对实际的图像块和输入图像进行匹配,应用场景:比如要在一堆图像中寻找指定人脸,就可以利用此算法在图像中找到此人脸的最佳匹配,确定相似度。并且可以利用函数cvMin...
  • gdut2015go
  • gdut2015go
  • 2015年05月25日 16:34
  • 1265

OpenCV 学习笔记(模板匹配)

OpenCV 学习笔记(模板匹配)模板匹配是在一幅图像中寻找一个特定目标的方法之一。这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否“相似”,当相似度足够高时,就认为找到了我们...
  • liyuanbhu
  • liyuanbhu
  • 2015年11月14日 22:20
  • 25970

opencv学习_11 (模板匹配(包括单模板和多模板))

模板匹配——在一幅图像中匹配与模板相似的单个或者多个目标 (1)目标匹配函数: cvMatchTemplate( const CvArr* image, constCvArr* templ,    ...
  • Lu597203933
  • Lu597203933
  • 2013年11月08日 21:16
  • 37615

OpenCV 谈opencv的长处与短处:模板匹配,金字塔

http://blog.csdn.net/mr_vision/article/details/3999662        opencv是一个开源的计算机视觉开发包,这已是众所周知的了,而且越来越...
  • u011430225
  • u011430225
  • 2015年08月21日 21:09
  • 6194

opencv金字塔模板匹配算法

  • 2015年07月09日 15:55
  • 11MB
  • 下载

基于opencv的模板匹配算法

  • 2013年11月26日 10:58
  • 2.22MB
  • 下载

opencv 中模板匹配的完整例子

  • 2014年09月12日 17:55
  • 6KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:opencv 模板匹配(cvMatchTemplate)
举报原因:
原因补充:

(最多只允许输入30个字)