现在的位置: 首页 > 综合 > 正文

匹配_寻对号

2012年02月06日 ⁄ 综合 ⁄ 共 2070字 ⁄ 字号 评论关闭

有段时间没写日志后了,上传一个匹配代码,不过这代码有点问题

// 匹配法_寻对号.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;
}

抱歉!评论已关闭.