24 OpenCV直方图比较compareHist

一、直方图比较

  • 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间,然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度,进而比较图像本身的相似程度。
  • Opencv提供的比较方法有四种
    • Correlation 相关性比较 -(计算结果范围为 -1到1 -1很不相关,1完全一样 )
    • Chi-Square 卡方比较 -(计算结果越接近0,两个直方图越相似)
    • Intersection 十字交叉性 -(计算公式为取两个直方图每个相同位置的值的最小值,然后求和,这个比较方式不是很好,不建议使用)
    • Bhattacharyya distance 巴氏距离 - (比较结果是很准的,计算结果范围为 0-1 ,0表示两个直方图非常相关,1最不相似)

二、相关性计算(CV_COMP_CORREL)

在这里插入图片描述

三、卡方计算(CV_COMP_CHISQR)

在这里插入图片描述

四、十字计算(CV_COMP_INTERSECT)

在这里插入图片描述

五、巴氏距离计算(CV_COMP_BHATTACHARYYA )

在这里插入图片描述

六、步骤

  • 首先把图像从RGB色彩空间转换到HSV色彩空间 cvtColor
  • 计算图像的直方图,然后归一化到[0~1]之间calcHist和normalize;
  • 使用上述四种比较方法之一进行比较compareHist
compareHist(
InputArray h1, // 直方图数据,下同
InputArray H2,
int method// 比较方法,上述四种方法之一
)

七、示例

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

using namespace std;
using namespace cv;

string convertToString(double d);

int main(int argc, char** argv) {
   
	// 1. 声明储存基准图像和另外两张对比图像的矩阵( RGB 和 HSV )
	Mat base, test1, test2;
	Mat hsvbase, hsvtest1, hsvtest2;
	// 2. 装载基准图像(src_base) 和两张测试图像:
	base = imread("images/14.png");
	if (!base.data) {
   
		printf("could not load image...\n");
		return -</
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值