cvMatchShapes函数使用

double cvMatchShapes(
const void* object1,
const void* object2,
int method,
double parameter = 0
);

第一个参数是待匹配的物体1,第二个是待匹配的物体2
第三个参数method可以有CV_CONTOURS_MATCH_I1,CV_CONTOURS_MATCH_I2,CV_CONTOURS_MATCH_I3
三种输入,这其实就是三种不同的判定物体相似的方法,匹配的返回值也是不一样的其返回值分别通过下面的公式计算得出

 

 

# include "cv.h"
# include "highgui.h"
# include <iostream>
using namespace std;

int main()

   IplImage *mode = cvLoadImage("D:\\picture\\jz.jpg", 1);
   IplImage *test = cvLoadImage("D:\\picture\\stuff.jpg", 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( canny_mode, mode_mems,
                  &mode_seqs,sizeof(CvContour),CV_RETR_TREE);

   //test contours
   cvCanny(bw_test,canny_test,50,60);
   cvFindContours( canny_test, test_mems,
                  &test_seqs,sizeof(CvContour),CV_RETR_TREE);

   double matching=cvMatchShapes( test_seqs, mode_seqs, CV_CONTOURS_MATCH_I1,0);
   cout << matching << endl;
   
   system("pause");
   //释放内存
}

 
 
 
 
 
 
 
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;
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值