图像处理之直方图比较(匹配)

下面代码使用灰度图像而不是HSV空间图像,下面将对比与官方文档结果的不同

#include "cv.h"
#include "highgui.h"
using namespace cv;
using namespace std;
int main(int argc,char *argv[])
{	
	Mat temp,tempGray,halfTempGray,test1,test1Gray,test2,test2Gray;
	temp=imread("temp.jpg");
	test1=imread("test1.jpg");
	test2=imread("test2.jpg");
	cvtColor(temp,tempGray,CV_BGR2GRAY);
	cvtColor(test1,test1Gray,CV_BGR2GRAY);
	cvtColor(test2,test2Gray,CV_BGR2GRAY);
	halfTempGray=tempGray(Range(tempGray.rows/2,tempGray.rows-1),Range(0,tempGray.cols-1));
	imshow("tempGray",tempGray);
	imshow("halfTempGray",halfTempGray);
	imshow("test1Gray",test1Gray);
	imshow("test2Gray",test2Gray);
	
	int channels=0;
	int histSize=256;
	float range[]={0,255};
	const float *histRange={range};
	Mat histTemp,histHalfTemp,histTest1,histTest2;

	calcHist(&tempGray,1,&channels,Mat(),histTemp,1,&histSize,&histRange,true,false);
	normalize(histTemp,histTemp,0,1,NORM_MINMAX);
	calcHist(&halfTempGray,1,&channels,Mat(),histHalfTemp,1,&histSize,&histRange,true,false);
	normalize(histHalfTemp,histHalfTemp,0,1,NORM_MINMAX);
	calcHist(&test1Gray,1,&channels,Mat(),histTest1,1,&histSize,&histRange);
	normalize(histTest1,histTest1,0,1,NORM_MINMAX);
	calcHist(&test2Gray,1,&channels,Mat(),histTest2,1,&histSize,&histRange);
	normalize(histTest2,histTest2,0,1,NORM_MINMAX);

	Mat matchValues(4,4,CV_64F);
	for (int i=0;i<4;i++)
	{
		matchValues.at<double>(0,i)=compareHist(histTemp,histTemp,i);
		matchValues.at<double>(1,i)=compareHist(histTemp,histHalfTemp,i);
		matchValues.at<double>(2,i)=compareHist(histTemp,histTest1,i);
		matchValues.at<double>(3,i)=compareHist(histTemp,histTest2,i);
	}
	cout<<"matchValues=\n "<<matchValues<<endl;

	waitKey(0);
	destroyAllWindows();
	return 0;
}

结果:

直接使用灰度空间结果:(不同行代表不同图像的匹配,不同列代表不同比较方法)

使用HSV空间得到到的结果:


直接使用灰度图像而不是HSV图像时test1与temp相似度提升!

可知直方图匹配对光照是十分敏感的,匹配效果不十分好。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值