opencv——模板匹配
来源:互联网 发布:网络道德规范的主体是 编辑:程序博客网 时间:2024/05/17 08:22
<p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; font-family: Arial; font-size: 14px; line-height: 26px;">模板匹配是通过在输入图像上滑动模板图像块对实际的图像块和输入图像进行匹配,<span style="color: rgb(255, 0, 0);">应用场景:比如要在一堆图像中寻找指定人脸,就可以利用此算法在图像中找到此人脸的最佳匹配,确定相似度。</span>并且可以利用函数cvMinMaxLoc()找到最佳匹配的位置。对于特定的应用来说,如视频中应用自动部分检测或跟踪(视频中的车牌识别),可以试试所有这些方法,找到最合适的method,这里要考虑算法的性能。</p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; font-family: Arial; font-size: 14px; line-height: 26px;">-----------------------------------------------------------------------------------------------</p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; font-family: Arial; font-size: 14px; line-height: 26px;"></p><h3 style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px;">MatchTemplate</h3><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; font-family: Arial; font-size: 14px; line-height: 26px;"></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; font-family: Arial; font-size: 14px; line-height: 26px;">比较模板和重叠的图像区域</p><pre style="white-space: pre-wrap; word-wrap: break-word; font-size: 14px; line-height: 26px; background-color: rgb(255, 255, 255);">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 之间求和):
-----------------------------------------------------------------------------------------------
#include <opencv2\opencv.hpp>#include <stdio.h>int main(int argc,char arg[]){//读取源图像IplImage *s = cvLoadImage("2.jpg");IplImage *src = cvCreateImage(cvGetSize(s),8,1); //读取模板图像IplImage *temp = cvLoadImage("6.jpg");IplImage *temp1 = cvCreateImage(cvGetSize(temp),8,1); //分别转换源图像和模板图像cvCvtColor(s,src,CV_RGB2GRAY);cvCvtColor(temp,temp1,CV_RGB2GRAY); // 创建图像数组IplImage *ftmp[6];int i;int iwidth = src->width-temp1->width+1;int iheight = src->height-temp1->height+1;for ( i = 0 ;i<6;++i){//令图像数组的图像大小为源图像的大小-模板图像ftmp[i] = cvCreateImage(cvSize(iwidth,iheight),32,1);//模板匹配,//分别将各种方式的匹配结果放入数组中cvMatchTemplate(src,temp1,ftmp[i],i);//cvNormalize的使用使结果具有一致性,//CV_MINMAX标志告诉函数对浮点图像进行平移和缩放,使得所有返回结果都在0到1之间cvNormalize(ftmp[i],ftmp[i],1,0,CV_MINMAX);}//显示结果cvNamedWindow("Template",0);cvShowImage("Template",temp1);cvNamedWindow("Image",0);cvShowImage("Image",src);cvNamedWindow("1",0);cvShowImage("1",ftmp[0]);cvNamedWindow("2",0);cvShowImage("2",ftmp[1]);cvNamedWindow("3",0);cvShowImage("3",ftmp[2]);cvNamedWindow("4",0);cvShowImage("4",ftmp[3]);cvNamedWindow("5",0);cvShowImage("5",ftmp[4]);cvNamedWindow("6",0);cvShowImage("6",ftmp[5]);cvWaitKey(0);//释放图像和消除窗口cvReleaseImage(&temp1);cvDestroyWindow("Template");cvReleaseImage(&src);cvDestroyWindow("Image");cvReleaseImage(&ftmp[0]);cvDestroyWindow("1");cvReleaseImage(&ftmp[1]);cvDestroyWindow("2");cvReleaseImage(&ftmp[2]);cvDestroyWindow("3");cvReleaseImage(&ftmp[3]);cvDestroyWindow("4");cvReleaseImage(&ftmp[4]);cvDestroyWindow("5");cvReleaseImage(&ftmp[5]);cvDestroyWindow("6");return 0;}
0 0
- opencv——模板匹配
- OpenCV学习——模板匹配
- opencv——实现目标模板匹配
- OpenCV学习笔记(十三)——模板匹配
- OpenCV学习笔记(十三)——模板匹配
- OpenCV中文网站例程——单目标模板匹配
- OpenCV中文网站例程——多目标模板匹配
- OpenCV学习笔记(5)——模板匹配
- opencv-模板匹配
- OpenCV模板匹配
- opencv的模板匹配
- OpenCV编程->模板匹配
- opencv模板匹配
- opencv 模板匹配(cvMatchTemplate)
- Opencv模板匹配运用
- 【OpenCV】模板匹配
- openCV实现模板匹配
- opencv-模板匹配
- ios: UI学习总结(user Interface)
- js使用slice函数拆分数组
- Android方面
- Binary Tree Zigzag Level Order Traversal,Restore IP Addresses,Word Search,Simplify Path
- C++中重要关键字总结
- opencv——模板匹配
- 设计模式——中介模式
- vim 显示中文成乱码问题解决
- Windows下安装配置SubVersion的简明步骤
- DZ60通过IIC读取LM75温度遇到问题解决方法
- 提前定义,不然编译器找不到
- 关于android对File操作的一类总结
- ios: UI学习总结(user Interface) UITextField
- 分布式 Key-Value 存储系统:Cassandra 入门