第21集 目标匹配

补充:

#include ""中的内容相对于当前cpp文件目录

cvLoadImage("")中的路径相对于工程目录

cvMatchTemplate

计算结果矩阵中的最小值,最大值以及坐标:cvMinMaxLoc

画矩形:cvRectTangle

程序:

#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include <iostream>
int MatchTemplate(int argc,char** argv)
{
//步骤1:加载模板图像,目标图像,创建结果图像
IplImage* MatchTemplate=cvLoadImage("e:\\picture\\MatchTemplate.jpg",0); //注意必须为单通道图像
IplImage* MatchTemplateDst=cvLoadImage("e:\\picture\\MatchTemplateDst.jpg",0);
IplImage* MatchTemplateDstColor=cvLoadImage("e:\\picture\\MatchTemplateDst.jpg",1);
cvNamedWindow("MatchTemplate");
cvNamedWindow("MatchTemplateDst");
cvShowImage("MatchTemplate",MatchTemplate);
cvShowImage("MatchTemplateDst",MatchTemplateDst);
int ResultImageX=MatchTemplateDst->width-MatchTemplate->width+1;
int ResultImageY=MatchTemplateDst->height-MatchTemplate->height+1;
IplImage* ResultImage=cvCreateImage(cvSize(ResultImageX,ResultImageY),32,1);
cvZero(ResultImage);
//步骤2:匹配图像,保存结果
cvMatchTemplate(MatchTemplateDst,MatchTemplate,ResultImage,CV_TM_CCOEFF);
//步骤3:确定匹配图像坐标并且框出结果
double MinResultBefore=0;
double MaxResultBefore=0;
for(int i=0;i<10;i++)
{
double MinResult=0;
double MaxResult=0;
static int ResultNum=0; //计算符合的结果数目
CvPoint MinPtLeftUp;
CvPoint MaxPtLeftUp;
cvMinMaxLoc(ResultImage,&MinResult,&MaxResult,&MinPtLeftUp,&MaxPtLeftUp); //计算结果矩形中最大最小值及其坐标
if(ResultNum==0)
{
MinResultBefore=MinResult;
MaxResultBefore=MaxResult;
ResultNum++;
}
if(MaxResultBefore-MaxResult<1000000)
{
int MaxPtRightDownX=MaxPtLeftUp.x+MatchTemplate->width;
int MaxPtRightDownY=MaxPtLeftUp.y+MatchTemplate->height;
std::cout<<"MaxResult:"<<MaxResult<<std::endl;
std::cout<<"MaxPtRightDownX:"<<MaxPtRightDownX<<std::endl;
std::cout<<"MaxPtRightDownY:"<<MaxPtRightDownY<<std::endl;
CvPoint MaxPtRightDown=cvPoint(MaxPtRightDownX,MaxPtRightDownY);
cvRectangle(MatchTemplateDstColor,MaxPtLeftUp,MaxPtRightDown,cvScalar(0,255,0,NULL));
int SetResultLeftUpX=MaxPtLeftUp.x-MatchTemplate->width+1;
int SetResultLeftUpY=MaxPtLeftUp.y-MatchTemplate->height+1;
SetResultLeftUpX>0?SetResultLeftUpX:0;
SetResultLeftUpY>0?SetResultLeftUpY:0;
CvPoint SetResultLeftUp=cvPoint(SetResultLeftUpX,SetResultLeftUpY);
CvPoint SetResultRightDown=cvPoint(MaxPtRightDownX,MaxPtRightDownY);
cvRectangle(ResultImage,SetResultLeftUp,SetResultRightDown,cvRealScalar(MinResult),CV_FILLED);
MinResultBefore=MinResult;
MaxResultBefore=MaxResult;
ResultNum++;
}
else
{
std::cout<<"ResultNum is "<<ResultNum<<std::endl;
break;
}
}
cvNamedWindow("Result");
cvShowImage("Result",MatchTemplateDstColor);
cvWaitKey(0);
cvDestroyWindow("MatchTemplate");
cvDestroyWindow("MatchTemplateDst");
cvDestroyWindow("Result");
cvReleaseImage(&MatchTemplate);
cvReleaseImage(&MatchTemplateDst);
return 0;
}

第21集 目标匹配

时间: 2024-10-12 04:54:17

第21集 目标匹配的相关文章

BZOJ 1854: [Scoi2010]游戏 [连通分量 | 并查集 | 二分图匹配]

题意: 有$n \le 10^6$中物品,每种两个权值$\le 10^4$只能选一个,使得选出的所有权值从1递增,最大递增到多少 一开始想了一个奇怪的规定流量网络流+二分答案做法...然而我还不知道怎么规定流量...并且一定会T 然后发现题解中二分图匹配用了匈牙利,可以从小到大找增广路,貌似比较科学 然后发现还有用并查集的,看到“权值是点,装备是边”后突然灵机一动想到一个dfs做法 每个边的两个点可以选择一个 找出每个连通分量,如果里面有环或重边那么这里面所有点都可以选 如果是树的话,必须放弃一

Makefile:(实验)多个目标匹配时会采用最完整匹配的目标

结论源自实验测试,如果有疏漏希望指出 当Makefile中存在多个匹配的目标时,Makefile会采用哪个匹配的目标呢? 测试的Makefile如下: .PHONY: all clean quick_sort all: quick_sort bubble_sort #目标1 quick_sort: @echo "matching [email protected]" @echo 'in quick_sort' #目标2 %: @echo "matching [email pr

opencv学习之路(21)、模板匹配及应用

一.模板匹配概念 二.单模板匹配 1 #include "opencv2/opencv.hpp" 2 #include <iostream> 3 using namespace std; 4 using namespace cv; 5 6 void main() 7 { 8 Mat temp=imread("E://mu.jpg"); 9 Mat src=imread("E://lena.jpg"); 10 Mat dst=src.c

新闻标题:PMP高级修炼:国际项目集管理PgMP与实战工作坊成功举办

新闻作者:共创国际-项目管理者联盟   新闻正文: 读了几遍PMBOK,有PMP证书,就以为懂项目管理,OUT了!组织项目管理需要构建项目组合.项目集与单项目的三级项目体系,才能支撑组织业务与项目良好运营. 作为三级项目体系承上启下的中间核心管理层,项目集管理需要收益(benefit)导向,战略(strategy)一致,治理(governance)规划,干系人争取(engagement),拥抱变更(change).面对变化的环境与高不确定性,项目集管理理念.流程与方法,才是应对现实世界的真实“项

HA 高可用mysql集群

注意问题: 1.保持mysql用户和组的ID号是一致的: 2.filesystem 共享存储必须要有写入权限: 3.删除资源必须先删除约束,在删除资源: 1.安装数据库,这里使用maridb数据库: node1节点配置: tar -xf maridb-xx.tar.gz -C /usr/local ln -sv maridb-xx mysql cd /usr/local/mysql 初始化数据库,第二台node2不需要在进行初始化直接copy相关配置文件即可 2.配置filesystem NFS

iOS 中的正则匹配(工具类)

正则表达式 正则表达式是对字符串操作的一种逻辑公式, 用事先定义好的一些特定字符.及这些特定字符的组合, 组成一个"规则字符串", 这个"规则字符串"用来表达对字符串的一种过滤逻辑, 正则表达式就是用于描述这些规则的工具, 或者说, 正则表达式就是记录文本规则的代码. 在开发中, 我们经常会有查找符合某些复杂规则的字符串的需要, 比如数据校验: 判断用户的输入是否合法(如:用户注册的时候,QQ号码,电话号码,邮箱是否符合要求) 下面让我们先来看看正则匹配常用的一些字

GMM+Kalman Filter+Blob 目标跟踪

转 http://www.cnblogs.com/YangQiaoblog/p/5462453.html ==========图片版============================================================================== ===================================================================================== 最近学习了一下多目标跟踪,看了看Mat

C++异常处理的编程方法(阿愚,整整29集)

相遇篇 <第1集 初次与异常处理编程相邂逅> <第2集 C++中异常处理的游戏规则> <第3集 C++中catch(…)如何使用> <第4集 C++的异常处理和面向对象的紧密关系> <第5集 C++的异常rethrow> 相知篇 <第6集 对象的成员函数中抛出的异常> <第7集 构造函数中抛出的异常> <第8集 析构函数中抛出的异常> <第9集 C++的异常对象如何传送> <第10集 C++的

Struts2应用开发视频教程与源码合集

Struts 2是Struts的下一代产品,是在 struts 和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大.Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品.虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts