您的位置:首页 > 其它

灰色直方图图像匹配

2015-11-27 18:51 507 查看
#include "opencv2/highgui/highgui.hpp"
#include "opencv/cv.hpp"
#include "string.h"

//画直方图用
int HistogramBins = 256;
float HistogramRange1[2] = { 0, 255 };
float *HistogramRange[1] = { &HistogramRange1[0] };

/*
* imagefile1:
* imagefile2:
* method: could be CV_COMP_CHISQR, CV_COMP_BHATTACHARYYA, CV_COMP_CORREL, CV_COMP_INTERSECT
*/
int CompareHist(const char* imagefile1, const char* imagefile2)
{
IplImage *image1 = cvLoadImage(imagefile1, 0);
IplImage *image2 = cvLoadImage(imagefile2, 0);

CvHistogram *Histogram1 = cvCreateHist(1, &HistogramBins, CV_HIST_ARRAY, HistogramRange);
CvHistogram *Histogram2 = cvCreateHist(1, &HistogramBins, CV_HIST_ARRAY, HistogramRange);

cvCalcHist(&image1, Histogram1);
cvCalcHist(&image2, Histogram2);

cvNormalizeHist(Histogram1, 1);
cvNormalizeHist(Histogram2, 1);

// CV_COMP_CHISQR,CV_COMP_BHATTACHARYYA这两种都可以用来做直方图的比较,值越小,说明图形越相似
printf("CV_COMP_CHISQR : %.4f\n", cvCompareHist(Histogram1, Histogram2, CV_COMP_CHISQR));
printf("CV_COMP_BHATTACHARYYA : %.4f\n", cvCompareHist(Histogram1, Histogram2, CV_COMP_BHATTACHARYYA));

// CV_COMP_CORREL, CV_COMP_INTERSECT这两种直方图的比较,值越大,说明图形越相似
printf("CV_COMP_CORREL : %.4f\n", cvCompareHist(Histogram1, Histogram2, CV_COMP_CORREL));
printf("CV_COMP_INTERSECT : %.4f\n", cvCompareHist(Histogram1, Histogram2, CV_COMP_INTERSECT));

cvReleaseImage(&image1);
cvReleaseImage(&image2);
cvReleaseHist(&Histogram1);
cvReleaseHist(&Histogram2);
return 0;
}

int main(int argc, char* argv[])
{
char path1[111];
char path2[111];
strcpy(path1, "C:\\C_C++ code\\Photo and video\\mulpsq\\psq0032.jpg");
strcpy(path2, "C:\\C_C++ code\\Photo and video\\mulpsq\\psq0035.jpg");
CompareHist(path1,path2);
//CompareHist("d:\\camera.jpg", "d:\\camera1.jpg");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: