您的位置:首页 > 运维架构

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;
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: