图像模板匹配
来源:互联网 发布:离散最优化问题 编辑:程序博客网 时间:2024/05/18 00:37
模板匹配是在一幅图像中寻找到与给定目标模板图像的技术。在匹配过程中有两个主要因素:原图像I,模板图像T。为了在I上检测到与T最匹配的区域,需要在I上滑动模板窗口,每次需要将T在I上滑动一个像素大小(从左至右,从上至下),每次移动后,计算出其相似度来表征匹配结果的好与坏。依次将每个位置的匹配结果存储在R矩阵中,该矩阵的每一个点的亮度表示与模板T的匹配程度(越亮,匹配程度越高)。通过 minMaxLoc 函数可以找到R矩阵中的最大(小)值。
匹配方法:
a)method=CV_TM_SQDIFF
b)method=CV_TM_SQDIFF_NORMED
c)method=CV_TM_CCORR
d)method=CV_TM_CCORR_NORMED
e)method=CV_TM_CCOEFF
f)method=CV_TM_CCOEFF_NOR
以下是实现图像匹配的例程,其中定义了一个函数match实现匹配的具体过程:
// Templatematch.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "opencv2/opencv.hpp" using namespace std;using namespace cv;void match(Mat img,Mat tem);int main( int argc, char** argv ){ Mat img; Mat tem; img = imread("xiaobei.jpg" ); //读取原图像"xiaobei.jpg"if( img.empty() ) { //判断是否读取成功 cerr << "Cannot load file " << "xiaobei.jpg" << endl; return -1; } tem = imread("mask.jpg"); //读取模板图像"mask.jpg" if( tem.empty()) { cerr << "Cannot load file " <<"mask.jpg" << endl; return -1; } match( img, tem); imshow( "result", img ); imshow( "template", tem ); //显示结果/* wait until user press a key to exit */ cvWaitKey( 0 ); return 0; }void match(Mat img,Mat tem){Mat res; Mat mask; Point minloc, maxloc; double minval, maxval; int res_cols = img.cols - tem.cols + 1; int res_rows = img.rows - tem.rows + 1; res = cvCreateImage( cvSize(res_cols,res_rows), IPL_DEPTH_32F, 1 ); matchTemplate( img, tem, res,CV_TM_SQDIFF_NORMED ); //归一化平方差匹配法 minMaxLoc( res, &minval, &maxval, &minloc, &maxloc,mask); rectangle( img, cvPoint( minloc.x, minloc.y ), cvPoint( minloc.x + tem.cols, minloc.y + tem.rows ), cvScalar( 255, 255, 255, 0 ), 1, 0, 0 ); }
演示效果:
模板:
结果:
这里主要对以下两点进行分析:
1)
int res_cols = img.cols - tem.cols + 1; int res_rows = img.rows - tem.rows + 1;
结果矩阵R的计算,我是这样理解的:文章开篇提到模板图像每次在原图像上移动一个像素,并将计算出来的相似度存储在R中,那么在整个图像上每行横向移动只需移动img.rows-tem.rows个长度,因此每行共计算出img.rows-tem.rows+1个结果。同理,每列共计算出img.cols-tem.cols+1个结果。
2)两个函数:
未完待续~~~~~~~~~
0 0
- 图像模板匹配
- 图像分析--模板匹配
- opencv 图像模板匹配
- 对图像进行模板匹配
- 多线程加速图像模板匹配
- 图像处理之模板匹配
- 对图像进行模板匹配
- 图像比较之模板匹配
- Python OpenCV图像模板匹配
- 【OpenCV】模板匹配和图像拼接
- matlab/opencv图像处理之模板匹配
- 【图像处理】C++实现模板匹配
- 图像处理中的模板匹配c++实现
- [opencv]模板匹配算法(单图像模板匹配和基于模板匹配的目标跟踪)
- [opencv]模板匹配算法(单图像模板匹配和基于模板匹配的目标跟踪)
- 图像处理技术 —— 模板匹配算法
- opencv输出文字 opencv简单的图像模板匹配代码
- 图像处理中的模板匹配(程序基于Op…
- 杭电1087 Super Jumping! Jumping! Jumping!
- 我自己精心总结的面向对象,全是我自己的心得!
- PE结构详解
- 如何区分WS_POPUP、WS_OVERLAPPED和WS_CHILD
- IO完成端口学习示例
- 图像模板匹配
- 第6周作业1-闰年之循环判断
- leetcode-Search a 2D Matrix(2014.2.23)
- 求一个整型数字中有没有相同的部分
- myeclipse连接sqlserver2008学习分享
- github 代码管理基础
- gcc 常用命令
- Redis操作的封装类
- 定时器 T3定(8 位)通过中断方式控制 LED