直方图比较

来源:互联网 发布:淘宝上买ae片头模板 编辑:程序博客网 时间:2024/05/16 11:43

// HistogramCompare.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <cv.h>
#include <cvcam.h>
#include <cxcore.h>
#include <highgui.h>

#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cvcam.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")

CvHistogram *GetImageHistogram(IplImage *pSourceImage)
{
 assert(pSourceImage != NULL);
 
 IplImage *pHSV = cvCreateImage(cvGetSize(pSourceImage),IPL_DEPTH_8U,pSourceImage->nChannels);
 assert(pHSV != NULL);

 IplImage *pH_Plane = cvCreateImage(cvGetSize(pSourceImage),IPL_DEPTH_8U,1);
 IplImage *pS_Plane = cvCreateImage(cvGetSize(pSourceImage),IPL_DEPTH_8U,1);
 IplImage *pV_Plane = cvCreateImage(cvGetSize(pSourceImage),IPL_DEPTH_8U,1);

 IplImage *p_PlaneArray[] = {pH_Plane,pS_Plane};
 
 cvCvtPixToPlane(pSourceImage,pH_Plane,pS_Plane,pV_Plane,NULL);
 
 int nHBins = 30;
 int nSBins = 32;
 
 CvHistogram *pResultHistogram = NULL;

 {
  int szHistSize[] = { nHBins, nSBins };
  float dHRanges[] = { 0, 180 };
  float dSRanges[] = { 0, 255 };
  float *pRanges[] = { dHRanges, dSRanges};

  pResultHistogram = cvCreateHist(
          2,
       szHistSize,
       CV_HIST_ARRAY,
       pRanges
       );

  //计算直方图
  cvCalcHist(p_PlaneArray,pResultHistogram,0,NULL);

  if (pResultHistogram != NULL)
  {
   return pResultHistogram;
  }
  else
  {
   return NULL;
  }
  
 }

 


}

int main(int argc, char* argv[])
{
 IplImage *pSourceImage1 = cvLoadImage(argv[1]);
 assert(pSourceImage1 != NULL);

 CvHistogram *pResultHistogram1 = GetImageHistogram(pSourceImage1);
 assert(pResultHistogram1 != NULL);

 IplImage *pSourceImage2 = cvLoadImage(argv[2]);
 assert(pSourceImage2 != NULL);

 CvHistogram *pResultHistogram2 = GetImageHistogram(pSourceImage2);
 assert(pResultHistogram2 != NULL);

    double dResult = cvCompareHist(pResultHistogram1,pResultHistogram2,CV_COMP_CORREL);
 
 printf("%f",dResult);

 return 0;

 
}

 

原创粉丝点击