24 OpenCV直方图比较compareHist

本文介绍了OpenCV中用于比较图像直方图的四种方法:相关性(CV_COMP_CORREL)、卡方(CV_COMP_CHISQR)、十字计算(CV_COMP_INTERSECT)和巴氏距离(CV_COMP_BHATTACHARYYA)。通过比较直方图相似度来评估图像的相似程度,其中巴氏距离被认为是较为准确的方法。步骤包括将图像转为HSV色彩空间,计算并归一化直方图,最后进行比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、直方图比较

  • 对输入的两张图像计算得到直方图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 -1;
	}
	test1 = imread("images/15.png");
	test2 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值