当前位置: 首页 > 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.lryc.cn/news/585700.html

相关文章:

  • 深入探究编程拷贝
  • 基于Java Spring Boot开发的旅游景区智能管理系统 计算机毕业设计源码32487
  • 4万亿英伟达,凭什么?
  • 【Linux应用】Ubuntu20.04 aarch64开发板一键安装ROS2(清华源)
  • PandaCoder重大产品更新-引入Jenkinsfile文件支持
  • mysql的LIMIT 用法
  • 【AI大模型】超越RAG的搜索革命!分层框架让AI像专家团队一样深度思考
  • Java教程:JavaWeb ---MySQL高级
  • 隆重介绍 Xget for Chrome:您的终极下载加速器
  • linux kernel struct regmap_config结构详解
  • 【Quest开发】快速添加可手指触摸按钮
  • 3 OneNET-调试器模拟上报数据
  • Visual Studio Code 的 settings.json 配置指南
  • HarmonyOS NEXT端云一体化开发初体验
  • 世俱杯直播数据源通过反汇编获取到
  • gradle中namespace和applicationId的区别
  • Ubuntu20.04运行openmvg和openmvs实现三维重建(未成功,仅供参考)
  • 【酶解法】小鼠脾脏单细胞悬液的制备指南
  • 云网络产品
  • 7.11文件和异常
  • linux中cmake编译项目
  • 5G标准学习笔记15 --CSI-RS测量
  • Next知识框架、SSR、SSG和ISR知识框架梳理
  • SwiGLU是什么:Swish激活函数和门控线性单元(GLU)机制的激活函数
  • 2025 年第十五届 APMCM 亚太地区大学生数学建模竞赛C题 基于Quantum Boosting的二分类模型问题
  • 实时数仓和离线数仓还分不清楚?看完就懂了
  • defer关键字
  • PHT-CAD 笔记
  • 你见过的最差的程序员是怎样的?
  • docker设置代理