opencv——pcb上找圆mark点(模板匹配)
2013-12-29 16:29
351 查看
#include"stdafx.h" #include<cv.h> #include<highgui.h> #include<cxcore.h> #include<iostream> usingnamespacecv; usingnamespacestd; #defineDEBUG doublematchShapes(IplImage*src,IplImage*tmplt); CvPointmatchTemplate(IplImage*src,IplImage*tmplt); voidL_TemplateMatch(IplImage*src,IplImage*tmp); int_tmain(intargc,_TCHAR*argv[]) { cvNamedWindow("tmplt",1); cvNamedWindow("src",1); IplImage*pcbmark=cvLoadImage("5_000004.bmp",1); IplImage*tmplt=cvLoadImage("model.bmp",1); //IplImage*Rg=cvCreateImage(cvGetSize(pcbmark),8,3); //cvCvtColor(pcbmark,Rg,CV_GRAY2BGR); doublet=(double)getTickCount(); //cvWaitKey(1000); #ifdefDEBUG //cvShowImage("BGR",Rg); cvShowImage("src",pcbmark); cvShowImage("tmplt",tmplt); cvWaitKey(); #endif CvPointcenter=matchTemplate(pcbmark,tmplt); t=((double)getTickCount()-t)/getTickFrequency(); cout<<t<<endl; cvDestroyWindow("tmplt"); cvDestroyWindow("src"); return0; }
CvPointmatchTemplate(IplImage*src,IplImage*tmplt)
{
CvPointcenter;
CvSizesizeSrc=cvGetSize(src);
CvSizesizeTemp=cvGetSize(tmplt);
CvSizesizeResult=cvSize(sizeSrc.width-sizeTemp.width+1,sizeSrc.height-sizeTemp.height+1);
IplImage*imgResult=cvCreateImage(sizeResult,IPL_DEPTH_32F,1);
cvMatchTemplate(src,tmplt,imgResult,CV_TM_CCORR_NORMED);
//a=cvMatchShapes(src,tmplt,CV_CONTOURS_MATCH_I3);
floatdMax=0.;
CvPointpoint=cvPoint(0,0);
//for(intcx=0;cx<sizeResult.width;cx++)
//{
// for(intcy=0;cy<sizeResult.height;cy++)
// {
// floatfTemp=CV_IMAGE_ELEM(imgResult,float,cy,cx);
// if(dMax<fTemp)//找到最接近的位置
// {
// dMax=fTemp;
// point=cvPoint(cx,cy);//记录位置
// }
// }
//}
//CvPointpoint2=cvPoint(point.x+sizeTemp.width,point.y+sizeTemp.height);//对角位置
//cvRectangle(src,point,point2,cvScalar(255));
//center.x=fabs((double)(point.x+point2.x)/2);
//center.y=fabs((double)(point.y+point2.y)/2);
doublemin_val;
doublemax_val;
CvPointpt1;
CvPointpt2;
CvPointmin_loc;
CvPointmax_loc;
cvMinMaxLoc(imgResult,&min_val,&max_val,&min_loc,&max_loc,NULL);
CvRectrect=cvRect(max_loc.x,max_loc.y,tmplt->width,tmplt->height);
pt1=cvPoint(rect.x,rect.y);
pt2=cvPoint(rect.x+rect.width,rect.y+rect.height);
cvRectangle(src,pt1,pt2,cvScalar(255));
center.x=fabs((double)(pt1.x+pt2.x)/2);
center.y=fabs((double)(pt1.y+pt2.y)/2);
cvNamedWindow("Test",CV_WINDOW_AUTOSIZE);
cvShowImage("Test",src);
cvWaitKey();
cvDestroyWindow("Test");
returncenter;
}
相关文章推荐
- linux串口属性O_CTTY O_NDELAY
- 一些CPU架构模拟器
- Linux 日志分析工具之awstats详解 推荐
- hadoop初学
- opencv——pcb上寻找mark点(拟合椭圆的方法)
- opencv——通过面积筛选最大轮廓,并求凸包矩形的长和宽
- 网站的虚拟路径
- hadoop 全分布式配置
- opencv——阈值分割图像
- shell脚本if判断文件
- linux系统终端里下执行一个***.pl文件
- opencv——(动态)旋转图像
- #define中 #与##的神奇用法linux学习
- 一些经常用到的网站列表【常更新】
- Linux Socket编程中的心跳机制
- 编程菜鸟的日记-Linux无处不在
- opencv——设置ROI区域
- opencv——播放视频
- HAProxy 负载均衡器
- linux下vi命令大全