通过直方图(HS直方图)来对比图像之间的相似度

#include<iostream>
#include<opencv2/opencv.hpp>


using namespace std;
using namespace cv;

//通过直方图(HS直方图)来对比图像之间的相似度。
int main()
{
	//1 载入源图。
	Mat src1 = imread("风衣1.jpg");
	Mat src2 = imread("风衣2.jpg");
	Mat src3 = imread("风衣3.jpg");
	//2 转换hsv图。
	Mat grysrc1;
	Mat grysrc2;
	Mat grysrc3;
	cvtColor(src1,grysrc1,CV_BGR2HSV);
	cvtColor(src2,grysrc2,CV_BGR2HSV);
	cvtColor(src3,grysrc3,CV_BGR2HSV);
	
	//3. 截取原图下半张图。
	Mat half_src1 = src1(Range(src1.rows/2,src1.rows-1),Range(0,src1.cols-1));//range()的用法。
	
	//4. 准备计算直方图的参数。HS
	int Hnumber = 60;
	int Snumber = 64;
	int hist_size[] = { Hnumber,Snumber };
	int channels[] = {0,1};
	float Hrange[] = {0,180};
	float Srange[] = { 0,256 };
	const float* ranges[] = { Hrange,Srange };
	//5.定义各个图像的直方图。
	Mat hist_src1;
	Mat hist_src2;
	Mat hist_src3;
	Mat hist_halfsrc1;
	//6.开始计算直方图。
	calcHist(&src1,1,channels,Mat(),hist_src1,2,hist_size,ranges);
	calcHist(&src2,1,channels,Mat(),hist_src2,2,hist_size,ranges);
	calcHist(&src3,1,channels,Mat(),hist_src3,2,hist_size,ranges);
	calcHist(&half_src1,1,channels,Mat(),hist_halfsrc1,2,hist_size,ranges);
	//7.直方图归一化。
	normalize(hist_src1,hist_src1,0,1,NORM_MINMAX);
	normalize(hist_src2,hist_src2,0,1,NORM_MINMAX);
	normalize(hist_src3,hist_src3,0,1,NORM_MINMAX);
	normalize(hist_halfsrc1,hist_halfsrc1,0,1,NORM_MINMAX);
	//8.按照四种比较标准:关系,卡方,最小数重叠(直方相交),距离。
	for (int i = 0; i < 4; i++)
	{
		double src1_src1n=compareHist(hist_src1,hist_src1,i);
		double src1_src2n=compareHist(hist_src1,hist_src2,i);
		double src1_src3n=compareHist(hist_src1,hist_src3,i);
		double src1_halfsrc1n=compareHist(hist_src1,hist_halfsrc1,i);
	//9.输出对比结果。
		cout <<endl<< "the " << i+1 << "compare:" << endl;
		cout << "  1STto1ST:" << "src1-src1" << "  "<<src1_src1n<<endl;
		cout << "  1STto2CD:" << "src1-src2" << "  "<<src1_src2n<<endl;
		cout << "  1STto3RD:" << "src1-src3" << "  "<<src1_src3n<<endl;
		cout << "  1STtoHAF:" << "src1-half" << "  "<<src1_halfsrc1n<<endl;
	}















	waitKey(0);
	return 0;

}

在这里插入图片描述

可以看出,correlation 和intersection的方法比较时,越相似则结果值越大。
相反,chi—square和Bhat’tacharyya方法则是相反的,值越小越相似。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值