当前位置: 首页 > news >正文

OpenCV实现感知哈希(Perceptual Hash)算法的类cv::img_hash::PHash

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

算法描述

PHash是OpenCV中实现感知哈希(Perceptual Hash)算法的类。该算法用于快速比较图像的视觉相似性。它将图像压缩为一个简短的哈希值(通常为64位),可用于图像去重、版权识别、内容匹配等场景。

PHash 基于图像的低频信息(通过 DCT 变换提取)来生成哈希值,对轻微的噪声、缩放和旋转具有一定的鲁棒性。

成员函数

virtual void compute (InputArray input, OutputArray output)

参数说明:

  • input:输入图像(支持灰度图或彩色图,建议先转换为灰度图以提高一致性)。
  • output:输出哈希值,类型为 CV_8U,长度通常是 8 字节(64 位)。

功能:
计算输入图像的 PHash 哈希值,并保存到 output 中。

virtual double compare (InputArray hash1, InputArray hash2)

参数说明:

  • hash1, hash2:两个哈希值(必须是相同格式的 8 字节数组)。

返回值:两个哈希之间的汉明距离(Hamming Distance),表示差异程度。数值越小表示图像越相似。

功能:

比较两个哈希值的相似性,常用于判断两幅图像是否“看起来一样”。

代码示例

#include <opencv2/img_hash.hpp>
#include <opencv2/opencv.hpp>int main()
{// 加载图像cv::Mat img1 = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/img1.jpg", cv::IMREAD_GRAYSCALE );cv::Mat img2 = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/img2.jpg", cv::IMREAD_GRAYSCALE );if ( img1.empty() || img2.empty() ){std::cerr << "无法加载图像" << std::endl;return -1;}// 创建 PHash 算法对象cv::Ptr< cv::img_hash::PHash > phash = cv::img_hash::PHash::create();// 计算哈希值cv::Mat hash1, hash2;phash->compute( img1, hash1 );phash->compute( img2, hash2 );// 比较哈希值double distance = phash->compare( hash1, hash2 );std::cout << "汉明距离: " << distance << std::endl;return 0;
}

运行结果

汉明距离: 1
http://www.dtcms.com/a/274978.html

相关文章:

  • 商城网站建设实务
  • Ragflow-plus本地部署和智能问答及报告编写应用测试
  • 标准化模型格式ONNX介绍:打通AI模型从训练到部署的环节
  • C语言易错点(二)
  • C++包管理工具:conan2常用命令详解
  • JVM-----【并发可达性分析】
  • Android 12系统源码_分屏模式(一)从最近任务触发分屏模式
  • 微信小程序核心知识点速览
  • OpenCV图像基本操作:读取、显示与保存
  • OpenLLMetry 助力 LLM 应用实现可观测性
  • 1-Git安装配置与远程仓库使用
  • uniapp---入门、基本配置了解
  • springboot-2.3.3.RELEASE升级2.7.16,swagger2.9.2升级3.0.0过程
  • 猿人学js逆向比赛第一届第十九题
  • 大数据在UI前端的应用深化:用户行为数据的跨渠道整合分析
  • MinIO配置项速查表【五】
  • CentOS 安装 Redis 简明指南
  • linux中cmake编译项目
  • 深度学习14(循环神经网络)
  • Cocos游戏开发中,检测两个物体碰撞,并实现物理反弹逻辑
  • JAVA——选择结构、循环结构、随机数、嵌套循环、数组(一维、二维)
  • 亚古数据:澳大利亚公司的ABN和ACN号码是什么?
  • PyInstaller打包完整指南1
  • Java语言基础
  • 从硬件层面上限制电脑用户只能上网访问特定的网址
  • 知识就是力量——STM32(低功耗芯片方向)
  • ROS系统如何接管工业机械臂?
  • U2Fusion: A Unified UnsupervisedImage Fusion Network
  • 2025 js——面试题(7)——ajax相关
  • Linux自动化构建工具(一)