zoukankan      html  css  js  c++  java
  • opencv 矩阵的相似性对比 (图片之间比较)

    测试图片:

       

    code:

    #include <opencvcv.h>
    #include <opencvhighgui.h>
    #include <opencvcxcore.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 
    ",result);
     
    	//释放轮廓存储空间
    	cvReleaseMemStorage(&contour1->storage);
    	cvReleaseMemStorage(&contour2->storage);
     
    	//释放图像空间
    	cvReleaseImage(&src1);
    	cvReleaseImage(&src2);
    	
    	return 0;
     
    }
     


     

  • 相关阅读:
    SpringMVC之使用ResponseEntity
    紧随时代的步伐--Java8特性之接口默认方法
    Executor多线程框架
    Jsoup入门
    Echart、Excel、highcharts、jfreechart对比
    JFreeChart入门
    Spring定时任务(@Scheduled)
    Java正则表达式入门基础篇
    Vue.js之入门
    springboot rabbitmq direct exchange和topic exchange 写法上关于路由键的区别
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3265285.html
Copyright © 2011-2022 走看看