基于C++的OpenCV4入门基础–图像直方图比较

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。基于C++的OpenCV4入门基础–图像直方图比较,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1,比较方法:
相关性值越大,越相似,其他方法,值越小,越相似。
在这里插入图片描述
2,函数说明:

CV_EXPORTS_W double compareHist( InputArray H1, InputArray H2, int method );

PS : 通过 method 选择需要进行比较的方法

通过读取两张RGB彩色图像,然后对每张图像进行三通道图像直方图统计,最后进行两张图像的直方图相似性比较,选择了相关性和巴氏距离分别进行比较

void hist_compare() {

	Mat src1 = imread("F:/code/images/face_01.png");
	Mat src2 = imread("F:/code/images/face_02.png");

	imshow("src1", src1);
	imshow("src2", src2);

	//计算三通道直方图(不用通道分离,而设置多通道参数)
	Mat hist1, hist2;
	int histSize[] = { 256, 256, 256 };
	int channels[] = { 0, 1, 2 };
	float c1[] = { 0, 255 };
	float c2[] = { 0, 255 };
	float c3[] = { 0, 255 };
	const float* histRanges[] = { c1, c2, c3 };

	calcHist(&src1, 1, channels, Mat(), hist1, 3, histSize, histRanges, true, false);
	calcHist(&src2, 1, channels, Mat(), hist2, 3, histSize, histRanges, true, false);
	 
	//归一化处理
	normalize(hist1, hist1, 0, 1, NORM_MINMAX, -1, Mat());
	normalize(hist2, hist2, 0, 1, NORM_MINMAX, -1, Mat());

	//比较(巴氏距离)
	double bs_h12 = compareHist(hist1, hist2, HISTCMP_BHATTACHARYYA);
	double bs_h11 = compareHist(hist1, hist1, HISTCMP_BHATTACHARYYA);
	printf("bs_h12:%.2f, bs_h11:%.2f\n", bs_h12, bs_h11);

	//比较(相关性)
	double co_h12 = compareHist(hist1, hist2, HISTCMP_CORREL);
	double co_h11 = compareHist(hist1, hist1, HISTCMP_CORREL);
	printf("co_h12:%.2f, co_h11:%.2f\n", co_h12, co_h11);
}

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/182015.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!