cvMatchTemplate()和cvMatchShapes() 的使用举例
来源:互联网 发布:c语言汇编看什么 编辑:程序博客网 时间:2024/06/04 18:17
cvMatchTemplate() 的使用举例:
例子摘自 http://blog.csdn.net/longlongago2000/archive/2008/09/19/2950622.aspx
//TempleMatchvoid MatchTemplate(CString imagefile,CString templefile){ //double a=0.; IplImage* imgSrc = cvLoadImage(“imagefile”); IplImage* imgTemp = cvLoadImage("templefile"); CvSize sizeSrc = cvGetSize(imgSrc); CvSize sizeTemp = cvGetSize(imgTemp); CvSize sizeResult = 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); float dMax = 0.; CvPoint point = cvPoint(0,0);//if(!a) MessageBox("Not Successful!",MB_OK);for (int cx=0 ; cx{ for (int cy=0 ; cy{ float fTemp = CV_IMAGE_ELEM(imgResult,float,cy,cx); if (dMax < fTemp) //找到最接近的位置 { dMax = fTemp; point = cvPoint(cx,cy); //记录位置 } } } CvPoint point2 = cvPoint(point.x+sizeTemp.width,point.y+sizeTemp.height); //对角位置 cvRectangle(imgSrc,point,point2,cvScalar(255)); cvNamedWindow( "Test", CV_WINDOW_AUTOSIZE ); cvShowImage("Test",imgSrc); /* for(;;) { int k = cvWaitKey(5); if( k == 27 ) break; } */ }void CFollowDlg::OnButton4() { // TODO: Add your control notification handler code here CString path; CFileDialog dlg(TRUE); if(dlg.DoModal()==IDOK) path=dlg.GetPathName(); MatchTemplate(path); }
关于cvMatchTemplate()的说明文档:
原型:
void cvMatchTemplate( const CvArr* image, const CvArr* templ, CvArr* result, int method );
image
- 欲搜索的图像。它应该是单通道、8-比特或32-比特 浮点数图像
- templ
- 搜索模板,不能大于输入图像,且与输入图像具有一样的数据类型
- result
- 比较结果的映射图像。单通道、32-比特浮点数. 如果图像是 W×H 而 templ 是 w×h ,则 result 一定是 (W-w+1)×(H-h+1).
- method
- 指定匹配方法:函数 cvMatchTemplate 与函数 cvCalcBackProjectPatch 类似。它滑动过整个图像 image, 用指定方法比较 templ 与图像尺寸为 w×h 的重叠区域,并且将比较结果存到 result 中。
- 函数完成比较后,通过使用cvMinMaxLoc找全局最小值CV_TM_SQDIFF*) 或者最大值 (CV_TM_CCORR* and CV_TM_CCOEFF*)。
cvMatchShapes()应用举例:
例子摘自http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=1736
int cvMatchShapes_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);//model contours//cvCanny(bw_mode,canny_mode,50,60);cvFindContours( bw_mode, mode_mems,&mode_seqs,sizeof(CvContour),CV_RETR_TREE);//test contours//cvCanny(bw_test,canny_test,50,60);cvFindContours( bw_test, test_mems,&test_seqs,sizeof(CvContour),CV_RETR_TREE);double matching=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 );return 1;}
关于cvMatchShapes()的说明文档:
MatchShapes
比较两个形状
double cvMatchShapes( const void* object1, const void* object2, int method, double parameter=0 );
- object1
- 第一个轮廓或灰度图像
- object2
- 第二个轮廓或灰度图像
- method
- 比较方法,其中之一 CV_CONTOUR_MATCH_I1, CV_CONTOURS_MATCH_I2 or CV_CONTOURS_MATCH_I3.
- parameter
- 比较方法的参数 (目前不用).
函数 cvMatchShapes 比较两个形状。 三个实现方法全部使用 Hu 矩 (见 cvGetHuMoments)
- cvMatchTemplate()和cvMatchShapes() 的使用举例
- cvMatchTemplate()和cvMatchShapes() 的使用举例
- OpenCV 中的 cvMatchTemplate() 的使用举例
- OpenCV 中的 cvMatchTemplate() 的使用举例
- OpenCV 中的 cvMatchTemplate() 的使用举例
- 使用cvMatchShapes对旋转物体的跟踪
- cvMatchShapes函数使用
- OpenCV的cvMatchTemplate用法
- 关于cvMatchTemplate的method
- cvMatchShapes旋转的物体跟踪
- fread和fwrite的使用举例
- QPrinter和QPrintDialog的使用举例
- Rust 的安装和使用举例
- opencv关于模板匹配cvMatchTemplate的运用
- Oracle 使用索引和不使用索引的举例
- diaplaytag的使用举例
- Equal 的使用举例
- SortedList的使用举例
- Struts2 主题theme
- 我在linux主机用arm-linux-gcc编译后,复制到开发板根目录运行,出现/bin/sh: ./hello not found
- EXT 3.x 使用详解之Ext.grid.GridPanel(二)
- VB学习1
- 如何打tag2
- cvMatchTemplate()和cvMatchShapes() 的使用举例
- 设置屏幕显示模式ScreenOrientation.
- 火车票订票系统的几点优化思考
- Java多线程间的通信
- 互联网平台技术迁移经验杂谈
- 如何打tag3
- 纯div+css水平三级导航菜单
- dos命令导出指定类型的文件列表
- vs2008 javascript 智能提示