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

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.xdnf.cn/news/15088.html

相关文章:

  • 亿级流量下的缓存架构设计:Redis+Caffeine多级缓存实战
  • C#中的设计模式:构建更加优雅的代码
  • 深入探究编程拷贝
  • 【Spring Boot】Spring Boot 4.0 的颠覆性AI特性全景解析,结合智能编码实战案例、底层架构革新及Prompt工程手册
  • Vue 表单开发优化实践:如何优雅地合并 `data()` 与 `resetForm()` 中的重复对象
  • 两台电脑通过网线直连形成局域网,共享一台wifi网络实现上网
  • 排序算法(一):冒泡排序
  • nginx 负载均衡配置(加解决重复登录问题)
  • 没有管理员权限,在服务器安装使用 Jupyter + R 内核
  • 【Linux仓库】命令行参数与环境变量【进程·伍】
  • 如何通过多点监控提升公网 IP 的稳定性和访问可用性
  • 全球化 2.0 | 印尼金融科技公司通过云轴科技ZStack实现VMware替代
  • 业务建模如何让金融数字化转型 “轻” 装上
  • rom定制系列------红米note10 5G版camellia原生安卓14批量线刷 miui安卓11修改型号root版
  • C语言:20250711笔记
  • 动态规划初步(完全背包)
  • T16IZ遥控器教程__遥控器与无人机对频
  • 线性回归原理推导与应用(十):逻辑回归多分类实战
  • 视频人脸处理——人脸面部动作提取
  • Spring Boot主从数据库完全教程 - 从零到精通
  • ubuntu22默认安装firefox使用snap安装还老打不开解决办法
  • Unity Demo——3D平台跳跃游戏笔记
  • IDE 关联 Git 操作
  • Flutter、Vue 3 和 React 在 UI 布局比较
  • windows下安装 redis
  • 代账行业数字化破局:从“知道”到“做到”,三步走稳赢!
  • 【Java】【力扣】102.二叉树层序遍历
  • 【TCP/IP】18. 因特网服务质量
  • PyTorch 与 Spring AI 集成实战
  • 【操作系统】线程