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;
 
}
 


 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值