视觉图像:模板匹配一

绪:
模板匹配是一项在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术,模板匹配不是基于直方图的,而是通过在输入图像上滑动图像块,对实际的图像块和输入图像进行匹配的一种匹配方法。

操作方法

  • 01

    定义: 模板匹配是在一副图像中寻找到与给定目标模板图像的技术。 在匹配过程中有两个主要因素:原始图像I,模板图像T。 为了在原始图像I上检测到与模板图像T最匹配的区域,需要在原始图像I上滑动模板窗口,每次需要将模板图像T在原始图像I上滑动一个像素大小(从左至右,从上至下),每次移动后计算出其相似度来表征匹配结果的好与坏。 将每个位置的匹配结果存储在R矩阵中,该矩阵的每一个点的亮度表示与模板图像T的匹配程度。 通过minMaxLoc函数找到R矩阵中的最大值、最小值。

  • 02

    匹配方法: 常见的相似度匹配方法: 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,归一化相关系数匹配法

  • 03

    相似性匹配结果矩阵R的大小: 模板图像在原始图像上移动一个像素,并将计算出来的相似度数据存储在R矩阵中,那么在整个原始图像上每行横向移动只需移动raw_img.cols-mask_img_cols+1次;每列纵向移动只需移动raw_img.cols-mask_img.cols+1次;

  • 04

    OpenCV模板匹配函数:matchTemplate() 格式:void matchTemplate(inputArray image,inputArray templ,outputArray result,int method) 功能:用于匹配出和模板重叠的图像区域 参数: inputArray image,待搜索的图像,且需为8位或32位浮点型图像; inputArray templ,搜索模板,需和源图像有一样的数据类型,且尺寸不能大于源图像。 outputArray result,比较结果的映射图像,其必须为单通道、32位浮点型图像,如果图像尺寸是W*H,而templ的尺寸是w*h,则此参数result一定是(W-w+1)x(H-h+1) ; int method,指定的匹配方法; 常见的匹配方法: (1)平方差匹配法 method=TM_SQDIFF (2)归一化平方差匹配法 method=TM_SQDIFF_NORMED (3)相关匹配法 method=TM_CCORR (4)归一化相关匹配法 method=TM_CCORR_NORMED (5)系数匹配法 method=TM_CCOEFF (6)归一化相关系数匹配法 method=TM_CCOEFF_NORMED 【注】:模板匹配的方法适用于模板很小,而原图像很大的情况下,不然得到的图像会很小,而且只是原图像左上的一部分,如果要检测的物体在右下角,可能在目标图中框不完全要检测的物体。

  • 05

    OpenCV函数:minMaxLoc() 功能:找到矩阵中全局最大值和最小值;

  • 06

    OpenCV模板匹配例程: #include <opencv2\opencv.hpp> using namespace std; using namespace cv; void match(Mat _raw_img,Mat _mask_img); int main( int argc, char** argv ) { Mat raw_img; Mat mask_img; raw_img = imread("raw.jpg" ); if( raw_img.empty() ) { cerr <<  "Cannot load file " << "raw.jpg" << endl; return -1; } mask_img = imread("mask.jpg");                       //读取模板图像"mask.jpg" if( mask_img.empty()) { cerr <<  "Cannot load file " <<"mask.jpg" << endl; return -1; } match( raw_img, mask_img); imshow( "result", raw_img ); imshow( "template", mask_img );                      //显示结果 /* wait until user press a key to exit */ waitKey( 0 ); return 0; } void match(Mat _raw_img,Mat _mask_img) { Mat res_img; Mat mask; Point  min_loc_p, max_loc_p; double min_val, max_val; int res_cols  = _raw_img.cols - _mask_img.cols + 1; int res_rows = _raw_img.rows - _mask_img.rows + 1; res_img = cvCreateImage( cvSize(res_cols,res_rows), IPL_DEPTH_32F, 3 ); matchTemplate( _raw_img, _mask_img, res_img,CV_TM_SQDIFF_NORMED ); //归一化平方差匹配法 minMaxLoc( res_img, &min_val, &max_val, &min_loc_p, &max_loc_p,mask); rectangle( _raw_img, cvPoint( min_loc_p.x, min_loc_p.y ), cvPoint( min_loc_p.x + _mask_img.cols, min_loc_p.y + _mask_img.rows ), cvScalar( 255, 255, 255, 0 ), 1, 0, 0 ); }

(0)

相关推荐

  • 视觉图像:模板匹配二

    绪: 模板匹配是在一幅图像中寻找与另一幅模板图像最匹配(相似)部分的技术: 最常见的模板匹配方法: (1)平方差匹配法 method=TM_SQDIFF (2)归一化平方差匹配法 method=TM_ ...

  • 视觉图像:卷积运算及代码实现

    绪: 图像卷积操作即: 原图像f(x),模板图像g(x), 首先,将模板g(x)在原图像f(x)中移动; 然后,每到一个位置,将f(x)与g(x)的定义域相交的元素进行乘积且求和,得出新的图像点: 遍 ...

  • 视觉图像:高斯模糊一

    绪: 高斯模糊:功能是使图像产生模糊的效果. 高斯模糊Gaussian Blur是图像模糊算法的一种,将正太分布即高斯分布用于图像处理, 本质是一种数据平滑技术. 操作方法 01 高斯模糊的原理: 所 ...

  • ps匹配颜色怎么用?ps匹配颜色在哪里?

    ps匹配颜色怎么用? ps匹配颜色在哪里?ps的这个功能比较简单,但是也比较实用.注意选择照片的时候要选择相近的,不然匹配出来也很难看哦. ps匹配颜色怎么用 01 分别打开两张照片,照片1是你希望能 ...

  • IE浏览器图像大小自动调整怎么启动

    日常使用浏览器中,难免会遇到图像太大或者太小的问题,这样给我们浏览网页时带来一些困扰.其实ie浏览器自带了图像大小匹配调整,我们只需要启动该功能,就可以轻松解决图片大小带来的困扰.下面就跟着小编一起来 ...

  • ps如何快速匹配色调不同色调的图片调成统一色调

    做设计的时候经常会为了整体协调,有时候需要将不同的图片都调整成统一色调.或者看到一张图片的色调非常完美,也想别的图片设置成一样的色调,该如何做呢?ps如何快速匹配色调?怎么给不同色调的图片调成统一色调 ...

  • photoshop cs6匹配颜色

    如果手边有两张或多张照片,想要把这些照片的颜色匹配在一起,也就是要使它们的颜色匹配一致,可以试试这种方法. 操作方法 01 打开软件,选择两张图片打开. 02 将第二张图片添加到第一张内.鼠标左键按住 ...

  • 用PhotoShop匹配颜色方法巧换皮肤颜色

    本文介绍如何使用Photoshop让美女皮肤的颜色变得红润有光泽,主要使用魔术棒选取皮肤部分,通过图层匹配颜色,再用素材替换原图肤色,添加蒙板等手段完成最终效果. 步骤/方法 01 首先来看一看原图: ...

  • 巧用匹配颜色进行换色

    美工在进行修图操作的时候,有的客户会要求将皮肤进行变色,如果要按照正常方法来的话,费时又费力,下面教你用匹配颜色功能进行快速换色. PS匹配颜色功能使用 01 进入PS界面,根据系统配置选择版本,避免 ...