opencv 矩阵的相似性对比 (图片之间比较)

测试图片:

  opencv 矩阵的相似性对比 (图片之间比较)  opencv 矩阵的相似性对比 (图片之间比较)

 

code:

#include <opencv\cv.h>

#include <opencv\highgui.h>

#include <opencv\cxcore.h>

#include <stdlib.h>

#include <stdio.h>







/*

*函数功能:获取输入图像 的轮廓

*

*输入: 

*srcIn : 单通道图像

*

*返回:

*CvSeq* : 存储轮廓信息

*

*/

 

CvSeq* getImageContour(IplImage* srcIn){

 

	IplImage* src;

	src = cvCreateImage(cvGetSize(srcIn),8,1);



	//拷贝图像 

	cvCopy(srcIn,src);

 

	//创建空间 

	CvMemStorage* mem = cvCreateMemStorage(0);

	//结构体 (mem和seq属于同一个地址<当释放的时候只要释放一个就行了>)

	CvSeq* seq;

 

	if(!mem){

		printf("mem is null");

	}

 

	//二值化图像

	cvThreshold(src,src,100,255,0);

 

	//计算图像轮廓 计算后的轮廓信息不能释放 在后面需要用到

	cvFindContours(src,mem,&seq,sizeof(CvContour),CV_RETR_CCOMP);

 

	//释放图像空间

	cvReleaseImage(&src);

 

	//返回轮廓信息

	 return seq;

 

}

 







int main(int argc, char* argv[]){

 

	//加载图像1

	IplImage* src1 = cvLoadImage("C:\\Users\\zxl\\Desktop\\1.png",CV_LOAD_IMAGE_GRAYSCALE);

	//获取图像1的轮廓

	CvSeq* contour1;

	contour1 = getImageContour(src1);





	//加载图像2

	IplImage* src2 = cvLoadImage("C:\\Users\\zxl\\Desktop\\3.png",CV_LOAD_IMAGE_GRAYSCALE);

	//获取图像2的轮廓

	CvSeq* contour2;

	contour2 = getImageContour(src2);

 



	//进行比对  -- 比较这两个轮廓所对应的HU矩的距离 有多远

	double result;

	//cvMatchShapes函数参数(轮廓1,轮廓2,方法)

	//计算第一个轮廓的普通矩和中心距 , 然后计算这个矩形的HU矩(HU距的7个数值保存在ma的数组里)

	//的哥个轮廓同上(HU距保存在mb中) 

	//然后比较这两个HU距的相似性 

	//方法参数有3个 参数分别是1,2,3 三种计算方法

	result = cvMatchShapes(contour1,contour2,1);



	//输出结果 结果越小 相似度越高

	printf("result is %f \n",result);

 

	//释放轮廓存储空间

	cvReleaseMemStorage(&contour1->storage);

	cvReleaseMemStorage(&contour2->storage);

 

	//释放图像空间

	cvReleaseImage(&src1);

	cvReleaseImage(&src2);

	

	return 0;

 

}

 


 

 

 

你可能感兴趣的:(opencv)