OpenCV 中的 cvMatchTemplate() 的使用举例
2013-09-04 20:19
519 查看
OpenCV中的cvMatchTemplate()的使用举例
jackyhwei发布于2010-11-1516:53 点击:1809次 | 来自:CSDN博客 |
TAG:
在学习 voidCFollowDlg::MatchTemplate(CStringpath){ //doublea=0.; IplImage*imgSrc=cvLoadImage(path); IplImage*imgTemp=cvLoadImage("C:\\t.bmp"); CvSizesizeSrc=cvGetSize(imgSrc); CvSizesizeTemp=cvGetSize(imgTemp); CvSizesizeResult=cvSize(sizeSrc.width-sizeTemp.width+1,sizeSrc.height-sizeTemp.height+1); IplImage*imgResult=cvCreateImage(sizeResult,IPL_DEPTH_32F,1); cvMatchTemplate(imgSrc,imgTemp,imgResult,CV_TM_CCORR_NORMED); // a=cvMatchShapes(imgSrc,imgTemp,CV_CONTOURS_MATCH_I3); floatdMax=0.; CvPointpoint=cvPoint(0,0); //if(!a)MessageBox("NotSuccessful!",MB_OK); for(intcx=0;cx { for(intcy=0;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(imgSrc,point,point2,cvScalar(255)); cvNamedWindow("Test",CV_WINDOW_AUTOSIZE); cvShowImage("Test",imgSrc); /* for(;;) { intk=cvWaitKey(5); if(k==27)break; } */ } voidCFollowDlg::OnButton4() { //TODO:Addyourcontrolnotificationhandlercodehere CStringpath; CFileDialogdlg(TRUE); if(dlg.DoModal()==IDOK) path=dlg.GetPathName(); MatchTemplate(path); } 希望对大家有所帮助! 关于cvMatchTemplate()的说明文档: 原型: voidcvMatchTemplate(constCvArr*image,constCvArr*templ, CvArr*result,intmethod); image欲搜索的图像。它应该是单通道、8-比特或32-比特浮点数图像templ搜索模板,不能大于输入图像,且与输入图像具有一样的数据类型result比较结果的映射图像。单通道、32-比特浮点数.如果图像是W×H而templ是w×h,则result一定是(W-w+1)×(H-h+1).method指定匹配方法:函数cvMatchTemplate与函数c 4000 vCalcBackProjectPatch类似。它滑动过整个图像image,用指定方法比较templ与图像尺寸为w×h的重叠区域,并且将比较结果存到result中。函数完成比较后,通过使用cvMinMaxLoc找全局最小值CV_TM_SQDIFF*)或者最大值(CV_TM_CCORR*andCV_TM_CCOEFF*)。 cvMatchShapes()应用举例: 例子摘自http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=1736 intcvMatchShapes_test() { IplImage*mode=cvLoadImage("D:\\lena.jpg",1); IplImage*test=cvLoadImage("D:\\test3.bmp",1); IplImage*bw_mode=cvCreateImage(cvGetSize(mode),mode->depth,1); IplImage*bw_test=cvCreateImage(cvGetSize(test),mode->depth,1); IplImage*canny_mode=cvCreateImage(cvGetSize(mode),mode->depth,1); IplImage*canny_test=cvCreateImage(cvGetSize(test),mode->depth,1); CvMemStorage*mode_mems=cvCreateMemStorage(); CvSeq*mode_seqs; CvMemStorage*test_mems=cvCreateMemStorage(); CvSeq*test_seqs; cvCvtColor(mode,bw_mode,CV_RGB2GRAY); cvCvtColor(test,bw_test,CV_RGB2GRAY); //modelcontours //cvCanny(bw_mode,canny_mode,50,60); cvFindContours(bw_mode,mode_mems, &mode_seqs,sizeof(CvContour),CV_RETR_TREE); //testcontours //cvCanny(bw_test,canny_test,50,60); cvFindContours(bw_test,test_mems, &test_seqs,sizeof(CvContour),CV_RETR_TREE); doublematching=cvMatchShapes(test_seqs,mode_seqs,3); printf("%f",matching); cvReleaseImage(&mode);// cvReleaseImage(&test); cvReleaseImage(&bw_mode);// cvReleaseImage(&bw_test); cvReleaseImage(&canny_mode);// cvReleaseImage(&canny_test); //ÊÍ·ÅÄÚ´æ return1; } 关于cvMatchShapes()的说明文档: MatchShapes比较两个形状doublecvMatchShapes(constvoid*object1,constvoid*object2, object1第一个轮廓或灰度图像object2第二个轮廓或灰度图像method比较方法,其中之一CV_CONTOUR_MATCH_I1,CV_CONTOURS_MATCH_I2orCV_CONTOURS_MATCH_I3.parameter比较方法的参数(目前不用). 函数cvMatchShapes比较两个形状。三个实现方法全部使用Hu矩(见cvGetHuMoments) (longlongago2000) |
相关文章推荐
- OpenCV 中的 cvMatchTemplate() 的使用举例
- OpenCV 中的 cvMatchTemplate() 的使用举例
- cvMatchTemplate()和cvMatchShapes() 的使用举例
- Opencv使用cv::matchTemplate进行模板匹配
- cvMatchTemplate()和cvMatchShapes() 的使用举例
- opencv 模板匹配(cvMatchTemplate)
- OpenCV中的模板匹配函数:cvMatchTemplate
- opencv关于模板匹配cvMatchTemplate的运用
- opencv中cvMatchTemplate模板匹配
- 使用Opencv中matchTemplate模板匹配方法跟踪移动目标
- 使用Opencv中matchTemplate模板匹配方法跟踪移动目标
- 【OpenCV3】模板匹配——cv::matchTemplate()详解
- opencv 模板匹配(cvMatchTemplate)
- C#中使用OpenCV(Emgu CV)
- OpenCV2 使用分水岭算法对图像分割的个人理解 cv::watershed()
- [转]opencv使用cvFindContours提取联通域
- 使用opencv的cvConvertScale让矩阵除以一个常数 结果总为0的 调试心得
- VS2010、C#、Emgu CV配置 ; 在C#下使用OpenCV ; C#中使用OpenCV(Emgu CV); 配置全程截图
- OpenCV Show Image cvShowImage() 使用方法
- opencv学习: 模板匹配函数matchTemplate