对比直方图

比较两个直方图相似度

Double compareHist(inputarray  H1,inputayyay H2,int mehtod)
Double compareHist(const Sparesemat& H1,const SpareseMat& H2,int mehod)


Mehtod  
		相关 mehod=CV_COMP_CORREL  1
		卡方 mehod=CV_COMP_CHISQR 2
		直方图相交 method=CV_COMP_INTERSECT 3Bhattacharyya距离 method=CV_COMP_BHATTACHARYYA 4 



#include <opencv2//highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/photo/photo.hpp>
using namespace std;
using namespace cv;

//*********************************
//("C:/Users/hasee-pc/Desktop/women.jpg");	
//*********************************


int main()
{
	Mat srcImage_base, hsvImage_base;
	Mat srcImage_test1, hsvImage_test1;
	Mat srcImage_test2, hsvImage_test2;
	Mat hsvImage_halfDown;

	srcImage_base = imread("C:/Users/hasee-pc/Desktop/book1.jpg", 1);
	srcImage_test1 = imread("C:/Users/hasee-pc/Desktop/book2.jpg", 1);
	srcImage_test2 = imread("C:/Users/hasee-pc/Desktop/book3.jpg", 1);

	imshow("基准图像", srcImage_base);
	imshow("测试图像 1", srcImage_test1);
	imshow("测试图像 2", srcImage_test2);

	cvtColor(srcImage_base, hsvImage_base, COLOR_BGR2HSV);
	cvtColor(srcImage_test1, hsvImage_test1, COLOR_BGR2HSV);
	cvtColor(srcImage_test2, hsvImage_test2, COLOR_BGR2HSV);


	hsvImage_halfDown = hsvImage_base(Range(hsvImage_base.rows / 2, hsvImage_base.rows - 1), Range(0, hsvImage_base.cols - 1));

	int h_bins = 50;
	int s_bins = 60;
	int histSize[] = { h_bins,s_bins };

	float h_ranges[] = { 0,256 };
	float s_ranges[] = { 0,180 };

	const float*ranges[] = { h_ranges,s_ranges };
	int channels[] = { 0,1 };

	MatND baseHist;
	MatND halfDownHist;
	MatND testHist1;
	MatND testHist2;

	calcHist(
		&hsvImage_base,
		1,
		channels,
		Mat(),
		baseHist,
		2,
		histSize,
		ranges,
		true,
		false
	);
	normalize(
		baseHist,
		baseHist,
		0,
		1,
		NORM_MINMAX,
		-1,
		Mat()
	);

	calcHist(
		&hsvImage_halfDown,
		1,
		channels,
		Mat(),
		halfDownHist,
		2,
		histSize,
		ranges,
		true,
		false
	);
	normalize(
		halfDownHist,
		halfDownHist,
		0,
		1,
		NORM_MINMAX,
		-1,
		Mat()
	);

	calcHist(
		&hsvImage_test1,
		1,
		channels,
		Mat(),
		testHist1,
		2,
		histSize,
		ranges,
		true,
		false
	);
	normalize(
		testHist1,
		testHist1,
		0,
		1,
		NORM_MINMAX,
		-1,
		Mat()
	);

	calcHist(
		&hsvImage_test2,
		1,
		channels,
		Mat(),
		testHist2,
		2,
		histSize,
		ranges,
		true,
		false
	);

	for (int i = 0; i < 4; ++i)
	{
		int compare_method = i;
		double base_base = compareHist(baseHist, baseHist, compare_method);
		double base_half = compareHist(baseHist, halfDownHist, compare_method);
		double base_test1 = compareHist(baseHist, testHist1, compare_method);
		double base_test2 = compareHist(baseHist, testHist2, compare_method);
		
		printf(" 方法[%d]的匹配结果如下:\n\n【基准图-基准图】:%f\n"
			"【基准图-半身图】:%f\n"
			"【基准图-测试图1】:%f\n"
			"【基准图-侧视图2】:%f\n"
			, i, base_base, base_half, base_test1, base_test2);
	}

	printf("检测结束\n");




	waitKey(0);
}

 

/*比较两个直方图相似度

Double compareHist(inputarray  H1,inputayyay H2,int mehtod)
Double compareHist(const Sparesemat& H1,const SpareseMat& H2,int mehod)


Mehtod  
		相关 mehod=CV_COMP_CORREL  1
		卡方 mehod=CV_COMP_CHISQR 2
		直方图相交 method=CV_COMP_INTERSECT 3Bhattacharyya距离 method=CV_COMP_BHATTACHARYYA 4 

*/

#include <opencv2//highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/photo/photo.hpp>
using namespace std;
using namespace cv;

//*********************************
//("C:/Users/hasee-pc/Desktop/women.jpg");	
//*********************************


int main()
{
	Mat srcImage_base, hsvImage_base;
	Mat srcImage_test1, hsvImage_test1;
	Mat srcImage_test2, hsvImage_test2;
	Mat hsvImage_halfDown;

	srcImage_base = imread("C:/Users/hasee-pc/Desktop/book1.jpg", 1);
	srcImage_test1 = imread("C:/Users/hasee-pc/Desktop/book2.jpg", 1);
	srcImage_test2 = imread("C:/Users/hasee-pc/Desktop/book3.jpg", 1);

	imshow("基准图像", srcImage_base);
	imshow("测试图像 1", srcImage_test1);
	imshow("测试图像 2", srcImage_test2);

	cvtColor(srcImage_base, hsvImage_base, COLOR_BGR2HSV);
	cvtColor(srcImage_test1, hsvImage_test1, COLOR_BGR2HSV);
	cvtColor(srcImage_test2, hsvImage_test2, COLOR_BGR2HSV);


	hsvImage_halfDown = hsvImage_base(Range(hsvImage_base.rows / 2, hsvImage_base.rows - 1), Range(0, hsvImage_base.cols - 1));

	int h_bins = 50;
	int s_bins = 60;
	int histSize[] = { h_bins,s_bins };

	float h_ranges[] = { 0,256 };
	float s_ranges[] = { 0,180 };

	const float*ranges[] = { h_ranges,s_ranges };
	int channels[] = { 0,1 };

	MatND baseHist;
	MatND halfDownHist;
	MatND testHist1;
	MatND testHist2;

	calcHist(
		&hsvImage_base,
		1,
		channels,
		Mat(),
		baseHist,
		2,
		histSize,
		ranges,
		true,
		false
	);
	normalize(
		baseHist,
		baseHist,
		0,
		1,
		NORM_MINMAX,
		-1,
		Mat()
	);

	calcHist(
		&hsvImage_halfDown,
		1,
		channels,
		Mat(),
		halfDownHist,
		2,
		histSize,
		ranges,
		true,
		false
	);
	normalize(
		halfDownHist,
		halfDownHist,
		0,
		1,
		NORM_MINMAX,
		-1,
		Mat()
	);

	calcHist(
		&hsvImage_test1,
		1,
		channels,
		Mat(),
		testHist1,
		2,
		histSize,
		ranges,
		true,
		false
	);
	normalize(
		testHist1,
		testHist1,
		0,
		1,
		NORM_MINMAX,
		-1,
		Mat()
	);

	calcHist(
		&hsvImage_test2,
		1,
		channels,
		Mat(),
		testHist2,
		2,
		histSize,
		ranges,
		true,
		false
	);

	for (int i = 0; i < 4; ++i)
	{
		int compare_method = i;
		double base_base = compareHist(baseHist, baseHist, compare_method);
		double base_half = compareHist(baseHist, halfDownHist, compare_method);
		double base_test1 = compareHist(baseHist, testHist1, compare_method);
		double base_test2 = compareHist(baseHist, testHist2, compare_method);
		
		printf(" 方法[%d]的匹配结果如下:\n\n【基准图-基准图】:%f\n"
			"【基准图-半身图】:%f\n"
			"【基准图-测试图1】:%f\n"
			"【基准图-侧视图2】:%f\n"
			, i, base_base, base_half, base_test1, base_test2);
	}

	printf("检测结束\n");




	waitKey(0);
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值