您的位置:首页 > 运维架构

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

2013-08-17 14:18 246 查看
测试图片:


 

 



 

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;

}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: