有段时间没写日志后了,上传一个匹配代码,不过这代码有点问题
// 匹配法_寻对号.cpp : 定义控制台应用程序的入口点。 // /*========================================================================= 名称:匹配_寻对号 时间:2013.08 说明: =========================================================================*/ #include "stdafx.h" #include "cv.h" #include "highgui.h" #include "cxcore.h" //-------------------匹配函数------------------// double OpencvChinaCom_getSimilarity(IplImage* src1,IplImage* src2) { CvMemStorage* mem1,*mem2; //声明两个内存空间 mem1 = cvCreateMemStorage(); //初始化内存空间 mem2 = cvCreateMemStorage(); CvSeq* contours1,*contours2; //查找轮廓 cvFindContours(src1,mem1,&contours1,sizeof(CvContour),CV_RETR_LIST); cvFindContours(src2,mem2,&contours2,sizeof(CvContour),CV_RETR_LIST); double match = cvMatchShapes(contours1,contours2,3); //匹配函数 //释放内存空间 cvClearMemStorage(mem1); cvClearMemStorage(mem2); return match; } //-------------------主函数-------------------// int _tmain(int argc, _TCHAR* argv[]) { //----加载待处理图像与出去头部大小不一样部分----// IplImage *src1 = cvLoadImage("./1.jpg", 0); //加载时强制转为灰度图片 IplImage *src3 = cvLoadImage("./3.jpg", 0); CvSize size; size.width = src1->width; size.height = src1->height - src3->height; IplImage *dst1 = cvCreateImage(size, src1->depth, 1); cvSetImageROI(src1, cvRect(0, src3->height, src1->width, src1->height-src3->height)); cvCopy(src1, dst1); cvResetImageROI(src1); //-------加载参考图片--------// IplImage *src2 = cvLoadImage("./2.jpg", 0); IplImage *dst2 = cvCreateImage(cvGetSize(src2), src2->depth, 1); cvThreshold(src2, src2, 100, 255, CV_THRESH_BINARY_INV); //-------获取待匹配图片--------// for(double x=0; cvRound(x)<=(dst1->height - src2->width); x=x+src2->width) { for(double y=0; cvRound(y)<=(dst1->height - src2->height); y=y+src2->height) { cvSetImageROI(dst1, cvRect(x, y, src2->width, src2->height)); cvCopy(dst1, dst2); cvThreshold(dst2,dst2,100,255,CV_THRESH_BINARY_INV); //初始化src1,设置对比参考 cvResetImageROI(dst1); //-----------调用匹配函数来对比并输出返回值------------// double similarity = 0; similarity = OpencvChinaCom_getSimilarity(src2,dst2); printf("匹配结果 %f\n" , similarity); } } printf("结果说明 匹配结果中 值越小的 越与源图像相似\n"); //释放内存 cvReleaseImage(&src1); cvReleaseImage(&src2); cvReleaseImage(&src3); cvReleaseImage(&dst1); cvReleaseImage(&dst2); cvReleaseImage(&dsr3); return 0; }