1单匹配:

测试图片:

 

code:

#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv\cxcore.h>
#include <stdlib.h>
#include <stdio.h> /*
模板匹配法 --图片查找
滑动窗口的原理
用等大小的模板窗口在范围中进行滑动 然后查找匹配
*/ int main(int argc, char* argv[]){ IplImage*src,*templat,*result,*show;
int srcW,templatW,srcH,templatH,resultW,resultH;
//加载源图像
src = cvLoadImage("C:\\Users\\zxl\\Desktop\\4.png" , CV_LOAD_IMAGE_GRAYSCALE); //用于显示结果
show = cvLoadImage("C:\\Users\\zxl\\Desktop\\4.png"); //加载模板图像
templat = cvLoadImage("C:\\Users\\zxl\\Desktop\\1.png" , CV_LOAD_IMAGE_GRAYSCALE); if(!src || !templat){
printf("打开图片失败");
return 0;
} srcW = src->width;
srcH = src->height; templatW = templat->width;
templatH = templat->height; if(srcW<templatW || srcH<templatH){
printf("模板不能比原图小");
return 0;
} //计算结果矩阵的大小
resultW = srcW - templatW + 1;
resultH = srcH - templatH + 1; //创建存放结果的空间
result = cvCreateImage(cvSize(resultW,resultH),32,1); double minVal,maxVal;
CvPoint minLoc,maxLoc; //调用模板匹配函数
cvMatchTemplate(src,templat,result,CV_TM_SQDIFF); //查找最相似的值及其所在坐标
cvMinMaxLoc(result,&minVal,&maxVal,&minLoc,&maxLoc,NULL); printf("minVal %f maxVal %f\n ",minVal,maxVal); //绘制结果
cvRectangle(show,minLoc,cvPoint(minLoc.x+templat->width,minLoc.y+templat->height),CV_RGB(0,255,0),1); //显示结果
cvNamedWindow("show");
cvNamedWindow("tem");
cvShowImage("show",show);
cvShowImage("tem" , templat);
cvWaitKey(0); return 0; }

2多匹配:

code:

#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv\cxcore.h>
#include <stdlib.h>
#include <stdio.h> /*
模板匹配法 --图片查找
滑动窗口的原理
用等大小的模板窗口在范围中进行滑动 然后查找匹配
*/ CvPoint getNextMinLoc(IplImage* result , int templatWidth,int templatHeight,double maxValIn , CvPoint lastLoc){ int y,x;
int startY,startX,endY,endX; //计算大矩形的左上角坐标
startY = lastLoc.y - templatHeight;
startX = lastLoc.x - templatWidth; //计算大矩形的右下角的坐标 大矩形的定义 可以看视频的演示
endY = lastLoc.y + templatHeight;
endX = lastLoc.x + templatWidth; //不允许矩形越界
startY = startY < 0 ? 0 : startY;
startX = startX < 0 ? 0 : startX;
endY = endY > result->height-1 ? result->height-1 : endY;
endX = endX > result->width - 1 ? result->width - 1 : endX; //将大矩形内部 赋值为最大值 使得 以后找的最小值 不会位于该区域 避免找到重叠的目标
for(y=startY;y<endY;y++){
for(x=startX;x<endX;x++){
cvSetReal2D(result,y,x,maxValIn);
}
} double minVal,maxVal;
CvPoint minLoc,maxLoc; //查找result中的最小值 及其所在坐标
cvMinMaxLoc(result,&minVal,&maxVal,&minLoc,&maxLoc,NULL); return minLoc; } int main(int argc, char* argv[]){ IplImage*src,*templat,*result,*show;
int srcW,templatW,srcH,templatH,resultW,resultH; //加载源图像
src = cvLoadImage("C:\\Users\\zxl\\Desktop\\4.png" , CV_LOAD_IMAGE_GRAYSCALE); //加载用于显示结果的图像
show = cvLoadImage("C:\\Users\\zxl\\Desktop\\4.png"); //加载模板图像
templat = cvLoadImage("C:\\Users\\zxl\\Desktop\\1.png" , CV_LOAD_IMAGE_GRAYSCALE); if(!src || !templat){
printf("打开图片失败");
return 0;
} srcW = src->width;
srcH = src->height; templatW = templat->width;
templatH = templat->height; if(srcW<templatW || srcH<templatH){
printf("模板不能比原图小");
return 0;
} //计算结果矩阵的宽度和高度
resultW = srcW - templatW + 1;
resultH = srcH - templatH + 1; //创建存放结果的空间
result = cvCreateImage(cvSize(resultW,resultH),32,1); double minVal,maxVal;
CvPoint minLoc,maxLoc; //进行模板匹配
cvMatchTemplate(src,templat,result,CV_TM_SQDIFF); //第一次查找最小值 即找到第一个最像的目标
cvMinMaxLoc(result,&minVal,&maxVal,&minLoc,&maxLoc,NULL);
//绘制第一个查找结果到图像上
cvRectangle(show,minLoc,cvPoint(minLoc.x+templat->width,minLoc.y+templat->height),CV_RGB(0,255,0),1); //查找第二个结果
minLoc = getNextMinLoc( result , templat->width,templat->height, maxVal , minLoc);
//绘制第二个结果
cvRectangle(show,minLoc,cvPoint(minLoc.x+templat->width,minLoc.y+templat->height),CV_RGB(0,255,0),1); //显示结果
cvNamedWindow("show");
cvShowImage("show",show);
cvWaitKey(0); return 0;
}

opencv 模板匹配与滑动窗口(单匹配) (多匹配)的更多相关文章

  1. python opencv3 FLANN单应性匹配

    git:https://github.com/linyi0604/Computer-Vision 匹配准确率非常高. 单应性指的是图像在投影发生了 畸变后仍然能够有较高的检测和匹配准确率 # codi ...

  2. LeetCode 滑动窗口题型整理

    一.滑动窗口题型模板 /* * 滑动窗口类型: 模板 */ public List<Integer> slideWindowMode(String s, String t) { // 1 ...

  3. 滑动窗口(Sliding Window)技巧总结

    什么是滑动窗口(Sliding Window) The Sliding Problem contains a sliding window which is a sub – list that run ...

  4. Atitit opencv模板匹配attilax总结

    Atitit opencv模板匹配attilax总结 找一幅图像的匹配的模板,可以在一段视频里寻找出我们感兴趣的东西,比如条形码的识别就可能需要这样类似的一个工作提取出条形码区域(当然这样的方法并不鲁 ...

  5. OpenCV——模板匹配

    minMaxLoc函数: void minMaxLoc( const Mat& src, double* minVal, double* maxVal=0, Point* minLoc=0, ...

  6. Atitit opencv 模板匹配

    Atitit opencv 模板匹配 1.1. 图片1 1.2. Atitit opencv 模板匹配  6中匹配算法貌似效果区别不大1 1.3. 对模板缩放的影响 一般的缩放可以,太大了就歇菜了.. ...

  7. SpringCloud系列九:SpringCloudConfig 基础配置(SpringCloudConfig 的基本概念、配置 SpringCloudConfig 服务端、抓取配置文件信息、客户端使用 SpringCloudConfig 进行配置、单仓库目录匹配、应用仓库自动选择、仓库匹配模式)

    1.概念:SpringCloudConfig 基础配置 2.具体内容 通过名词就可以发现,SpringCloudConfig 核心作用一定就在于进行配置文件的管理上.也就是说为了更好的进行所有微服务的 ...

  8. 关于双端队列 deque 模板 && 滑动窗口 (自出)

    嗯... deque 即为双端队列,是c++语言中STL库中提供的一个东西,其功能比队列更强大,可以从队列的头与尾进行操作... 但是它的操作与队列十分相似,详见代码1: 1 #include < ...

  9. 图像滑动窗口 利用opencv和matlab

    1.利用opencv实现图像滑动窗口操作 功能:利用opencv实现图像滑动窗口操作(即利用已知尺寸的窗口遍历整幅图像,形成许多子图像)  vs2015+opencv3.1  2016.10 函数实现 ...

随机推荐

  1. CentOS 6.5系统使用yum方式安装LAMP环境和phpMyAdmin详细过程

    介绍如何在CentOs6.2下面使用YUM配置安装LAMP环境,一些兄弟也很喜欢使用编译的安装方法,个人觉得如果不是对服务器做定制,用yum安装稳定简单,何必去download&make&am ...

  2. bzoj2482

    还是像以前那样维护下次出现位置,计算影响 其实不难,思维盲点,受到做最大子段和的影响 其实这里可以直接维护当前每个位置的子段和,再记录一个历史最大和 当然tag也需要记录当前tag和历史(距离上次pu ...

  3. OK335xS psplash 进度条工作原理 hacking

    #!/bin/sh # # rc This file is responsible for starting/stopping # services when the runlevel changes ...

  4. T-SQL备忘(1):表联接

    测试用例表如下: 1.取2个成员表中的交集(A∩B) T-SQL: select Member1.Name,Member1.Age from Member1 join Member2 on Membe ...

  5. mkswap 把一个分区格式化成为swap交换区

    mkswap /dev/sda* //创建此分区为swap 交换分区swapon /dev/sda* //加载交换分区swapoff /dev/sda* //关闭交换分区: 若想要开机自动挂载:vi ...

  6. 【大数取模】HDOJ-1134、CODEUP-1086

    1086: 大数取模   题目描述 现给你两个正整数A和B,请你计算A mod B.为了使问题简单,保证B小于100000. 输入 输入包含多组测试数据.每行输入包含两个正整数A和B.A的长度不超过1 ...

  7. 【转】iOS学习之Autolayout(代码添加约束) -- 不错不错

    原文网址:http://www.cnblogs.com/HypeCheng/articles/4192154.html DECEMBER 07, 2013 学习资料 文章 Beginning Auto ...

  8. Solr DIH以Mysql为数据源批量创建索引

    演示使用solr管理后台,以mysql为数据源,批量建索引的方法 测试于:Solr 4.5.1, mmseg4j 1.9.1, Jdk 1.6.0_45, Tomcat 6.0.37 | CentOS ...

  9. 苹果iphone4s完美越狱后破解4g网络方法

    苹果iphone4s完美越狱后破解4g网络方法教程 作者:佚名 字体:[增加 减小] 来源:互联网 时间:01-15 10:07:25我要评论 自从港版iPhone5s/c能够破解移动4G网络后, i ...

  10. 写的cursor demo仅作记录

    declare @objectID int; declare objcur cursor for object_id from m_object open objcur fetch next from ...