前面介绍了 数字图像灰度直方图,现在来尝试直方图的应用。
直方图的对比主要用以判断两幅图像的匹配度,我们试验以下两幅图像直方图对比的结果:


int main()
{
IplImage * image= cvLoadImage("myhand1.jpg");
IplImage * image2= cvLoadImage("myhand2.jpg");
int hist_size=256;
float range[] = {0,255};
float* ranges[]={range};
IplImage* gray_plane = cvCreateImage(cvGetSize(image),8,1);
cvCvtColor(image,gray_plane,CV_BGR2GRAY);
CvHistogram* gray_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);
cvCalcHist(&gray_plane,gray_hist,0,0);
IplImage* gray_plane2 = cvCreateImage(cvGetSize(image2),8,1);
cvCvtColor(image2,gray_plane2,CV_BGR2GRAY);
CvHistogram* gray_hist2 = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);
cvCalcHist(&gray_plane2,gray_hist2,0,0);
//相关:CV_COMP_CORREL
//卡方:CV_COMP_CHISQR
//直方图相交:CV_COMP_INTERSECT
//Bhattacharyya距离:CV_COMP_BHATTACHARYYA
double com=cvCompareHist(gray_hist,gray_hist2,CV_COMP_BHATTACHARYYA);
cout<<com<<endl;
}
输出结果为:0.396814
cvCompareHist的结果为【0,1】的浮点数,越小表示两幅图匹配度越高,0.0时两幅图精确匹配。opencv灰度直方图均衡化(可以试验两幅完全一样的图即为0.0)。
针对上面两幅图,我们分别先进行直方图匹配变化:


之后使用cvCompareHist()对比两幅图像的直方图,输出结果为0.267421

表明两幅图的匹配度变高了。
注意method用不同的方法对比结果是不同的。opencv灰度直方图均衡化
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-36729-1.html
期待你的小王子
那就让女性无偿服务呀
刚好送别