Opencv中的直方图(3)直方图比较函数compareHist()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

比较两个直方图。

函数 cv::compareHist 使用指定的方法比较两个密集或两个稀疏直方图。
该函数返回 d ( H 1 , H 2 ) d(H_1, H_2) d(H1,H2)
虽然该函数在处理一维、二维或三维的密集直方图时效果很好,但它可能不适合高维的稀疏直方图。在这样的直方图中,由于别名(aliasing)和采样问题,非零直方图bin的坐标可能会略微偏移。为了比较这样的直方图或更一般的加权点的稀疏配置,可以考虑使用 EMD 函数。

compareHist 是 OpenCV 中用于比较两个直方图相似性的函数。这个函数可以用来衡量两个直方图之间的差异或相似程度,常用于图像处理和计算机视觉任务中,比如图像检索、图像匹配或特征比较等。

函数原型1

ouble cv::compareHist
(InputArray 	H1,InputArray 	H2,int 	method 
)		

参数1

  • 参数H1 第一个被比较的直方图。
  • 参数H2 第二个被比较的直方图,与 H1 具有相同的尺寸。
  • 参数method 比较方法,参见 HistCompMethods。

函数原型2

这是一个重载的成员函数,为了方便而提供。它与上述函数的不同之处仅在于它接受的参数。

double cv::compareHist
(const SparseMat & 	H1,const SparseMat & 	H2,int 	method 
)		

代码示例


#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 加载两幅图像cv::Mat image1 = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/qiu.jpg", cv::IMREAD_GRAYSCALE );cv::Mat image2 = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/qiu2.png", cv::IMREAD_GRAYSCALE );if ( image1.empty() || image2.empty() ){std::cerr << "Error: Images not found or unable to read." << std::endl;return -1;}// 计算两个图像的直方图int histSize           = 256;float range[]          = { 0, 256 };const float* histRange = { range };bool uniform           = true;bool accumulate        = false;cv::Mat hist1, hist2;calcHist( &image1, 1, 0, cv::Mat(), hist1, 1, &histSize, &histRange, uniform, accumulate );calcHist( &image2, 1, 0, cv::Mat(), hist2, 1, &histSize, &histRange, uniform, accumulate );// 归一化直方图cv::normalize( hist1, hist1, 0, 1, cv::NORM_MINMAX, -1, cv::Mat() );cv::normalize( hist2, hist2, 0, 1, cv::NORM_MINMAX, -1, cv::Mat() );// 比较两个直方图double result_correlation   = compareHist( hist1, hist2, cv::HISTCMP_CORREL );double result_chisqr        = compareHist( hist1, hist2, cv::HISTCMP_CHISQR );double result_intersect     = compareHist( hist1, hist2, cv::HISTCMP_INTERSECT );double result_bhattacharyya = compareHist( hist1, hist2, cv::HISTCMP_BHATTACHARYYA );std::cout << "Correlation: " << result_correlation << std::endl;std::cout << "Chi-Squared: " << result_chisqr << std::endl;std::cout << "Intersection: " << result_intersect << std::endl;std::cout << "Bhattacharyya Distance: " << result_bhattacharyya << std::endl;return 0;
}

运行结果

在这里插入图片描述

输出结果解释

  1. Correlation (相关性):

    • 含义:相关性比较方法衡量两个直方图之间的线性关系。值范围通常在 -1 到 1 之间。
    • 结果:result_correlation 表示两个直方图的相关性得分。
    • 解释:如果结果接近 1,则表示两个直方图高度相关;如果接近 0,则表示没有相关性;如果接近 -1,则表示负相关。
  2. Chi-Squared (卡方):

    • 含义:卡方比较方法衡量两个直方图之间的差异。值范围通常是非负数。
    • 结果:result_chisqr 表示两个直方图的卡方得分。
    • 解释:如果结果接近 0,则表示两个直方图非常相似;如果结果较大,则表示两个直方图差异较大。
  3. Intersection (交集):

    • 含义:交集比较方法衡量两个直方图的交集部分。值范围通常在 0 到 1 之间。
    • 结果:result_intersect 表示两个直方图的交集得分。
    • 解释:如果结果接近 1,则表示两个直方图高度重合;如果接近 0,则表示几乎没有重合。
  4. Bhattacharyya Distance (巴塔查里雅距离):

    • 含义:巴塔查里雅距离衡量两个概率分布之间的相似性。值范围通常是非负数。
    • 结果:result_bhattacharyya 表示两个直方图的巴塔查里雅距离。
    • 解释:如果结果接近 0,则表示两个直方图非常相似;如果结果较大,则表示两个直方图差异较大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/415431.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记--Docker

安装 1.卸载旧版 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 2.配置Docker的yum库 首先要安…

Socket编程---UDP篇

目录 一. UDP协议 二. Socket编程 2.1 sockaddr家族 2.2 接口介绍 三. 服务端实现 四. 服务端调用实现 五. 客户端实现 六. 效果展示 一. UDP协议 何为UDP协议的含义&#xff0c;上篇粗略提及了一下TCP与UDP的区别&#xff1a; TCP&#xff1a; •…

2024最新盘点:主流的仓库管理软件有哪些?

本文将盘点10款主流的仓库管理软件&#xff0c;为企业选型仓库管理软件提供参考。 库存数据不准确、订单处理效率低下、仓库作业流程不规范&#xff1f;在数据管理与分析上遇到困难&#xff0c;企业发展和竞争力受阻&#xff1f;物流行业高速发展&#xff0c;而仓储管理却遇到重…

【Python入门】第1节 基础语法

&#x1f4d6;第1节 基础语法 ✅字面量✅注释✅变量✅数据类型&#x1f9ca;数据类型转换 ✅标识符✅运算符✅字符串扩展&#x1f9ca;字符串的三种定义方式&#x1f9ca;字符串拼接&#x1f9ca;字符串格式化&#x1f9ca;格式化的精度控制&#x1f9ca;字符串格式化方式2&…

Windows bat脚本学习六(十六进制与十进制互转)

一、十六进制转十进制 十六进制数转十进制数相对比较简单&#xff0c;可以直接通过0x来实现。 见如下代码&#xff1a; echo off chcp 65001set taaset /a hex0x%t% echo data%hex%pause 结果&#xff1a; 二、十进制转十六进制 这个转化比较麻烦&#xff0c;没有简便的方式转…

通过 GitHub Actions 执行数据库 Schema 变更工作流

原文地址 https://www.bytebase.com/docs/tutorials/github-ci/ 教程库&#xff1a;https://github.com/bytebase/github-action-example 开发者们喜欢将 Schema 变更脚本与应用程序代码一起保存在 Git 中&#xff0c;这样变更脚本就能像应用程序代码一样接受审核和版本控制&…

哪款直流电能表可在电信基站、直流充电桩、太阳能光伏用

安科瑞徐赟杰18706165067 在电信基站、直流充电桩、太阳能光伏等应用场合中&#xff0c;可使用DJSF1352-RN导轨式直流电能表&#xff0c;此表带有双路直流输入&#xff0c;该系列仪表可测量直流系统中的电压、电流、功率以及正反向电能等。可计量总电能&#xff0c;又可计量规…

ev录屏损坏修复

ev录屏应该不正常关闭&#xff0c;录屏损坏 淘宝买了一个软件&#xff0c;修复成功&#xff0c;需找一个当时时间段的正常录屏学习&#xff0c;然后高级修复。整体花费5毛钱

记录一下idea的一些使用技巧和遇到的异常(持续更新)

技巧 自己的模板——live template 有些代码在项目中通常会被用到或会被重复使用&#xff0c;可以自己写一个模板存起来&#xff0c;要用的时候用快捷键生成就可以了。 在这里选择生效范围 现在&#xff0c;就有我们自己的模板了&#xff0c;一回车就自动生成 idea的全局配置…

人工智能 | 结对编程助手GithubCopilot

简介 GitHub Copilot 是一款 AI 结对程序员&#xff0c;可帮助您更快、更少地编写代码。它从注释和代码中提取上下文&#xff0c;以立即建议单独的行和整个函数。GitHub Copilot 由 GitHub、OpenAI 和 Microsoft 开发的生成式 AI 模型提供支持。它可作为 Visual Studio Code、…

win系统安装mysql,使用mysqldump,pycharm使用mysqldump,避坑

文章目录 下载mysql的win客户端设置系统环境变量验证是否可用pycharm使用mysqldump异常问题排查 下载mysql的win客户端 官网下载地址如果下载旧版本&#xff0c;需自行到Archives里面找 本人使用的是mysql5.7&#xff0c;找到相应版本后&#xff0c;点击Download下载 设置系统…

[Java]SpringBoot登录认证流程详解

登录认证 登录接口 1.查看原型 2.查看接口 3.思路分析 登录核心就是根据用户名和密码查询用户信息,存在则登录成功, 不存在则登录失败 4.Controller Slf4j RestController public class LoginController {Autowiredprivate EmpService empService;/*** 登录的方法** param …

数仓基础(七):离线与实时数仓区别和建设思路

文章目录 离线与实时数仓区别和建设思路 一、离线数仓与实时数仓区别 二、实时数仓建设思路 离线与实时数仓区别和建设思路 一、离线数仓与实时数仓区别 离线数据与实时数仓区别如下&#xff1a; 对比方面 离线数仓 实时数仓 架构选择 传统大数据架构 Kappa架构 建设…

数据结构(Java)实现:栈和队列

文章目录 1. 栈的模拟实现1.1 普通栈的模拟实现1.2 泛型栈的模拟实现 2. 栈的介绍3. 栈的使用4. 栈的应用场景4.1 改变元素的序列4.2 将递归转换为循环4.3 使用栈解题 5. 栈的链表实现6. 队列概念7. 队列的使用8. 模拟队列的实现8.1 链式队列8.2 顺序队列 9. 双端队列 1. 栈的模…

Python编码系列—Python中的安全密码存储与验证:实战指南

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

livox MID-360调试(解决ip设置问题)

整体的调试思路参考大疆Livox Mid360 使用指南_mid360中的imu内参-CSDN博客这篇博客。 但是在调试过程中出现了ip地址设置不对导致的报错&#xff1a; 1.livox viewer中看不到点云数据 2.livox SDK2 bind error。 joeyjoey:~/slam/Livox-SDK2/build/samples/livox_lidar_qu…

基于PLC的电热水器的水箱水位控制系统(论文+源码)

1总体方案设计 本设计基于PLC的电热水器的水箱水位控制系统的整体结构如图2.1所示&#xff0c;系统采用S7-1200 PLC为控制器&#xff0c;可以实现电热水器水箱中的水位、水温检测&#xff0c;并且用户可以设定目标水位和水温&#xff0c;在自动模式下&#xff0c;当水位低于低水…

mysql 8.0 的 建表 和八种 建表引擎实例

文章目录 MySQL 8.0 中&#xff0c;主要有以下四种常见的建表引擎一、InnoDB 引擎建表注意点建表知识点 二、MyISAM 引擎建表使用场景 三、Memory 引擎使用场景 四、Archive 引擎五、BLACKHOLE 引擎一、特点二、适用场景三、注意事项 六、MRG_MyISAM 引擎MRG_MyISAM 和 MyISAM …

uniapp组件中的emit声明触发事件

emit解析 在 uniapp 中&#xff0c;emit 主要用于组件间通信&#xff0c;特别是在子组件需要向父组件或者其他组件发送消息的时候。具体用途包括&#xff1a; 子传父数据&#xff1a;子组件通过 $emit 触发一个事件&#xff0c;并携带参数&#xff0c;父组件监听这个事件并对参…

Oracle 网络安全产品安全认证检索

自2023年7月1日起&#xff0c;国家网信办、工业和信息化部、公安部、国家认证认可监督管理委员会统一公布和更新网络关键设备和网络安全专用产品清单。列入《网络关键设备和网络安全专用产品目录》的网络安全专用产品应当按照《信息安全技术网络安全专用产品安全技术要求》等相…