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

OpenCV哈希算法------Marr-Hildreth 边缘检测哈希算法

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

算法描述

该类实现了 Marr-Hildreth 边缘检测哈希算法(Marr-Hildreth Hash),用于图像相似性比较。它基于 Marr-Hildreth 边缘检测器(也称为 Laplacian of Gaussian, LoG)提取图像边缘信息,并生成二进制哈希值。

这种哈希方法对图像中的边缘结构非常敏感,适合用于:

  • 图像检索
  • 图像去重
  • 检测图像是否经过裁剪、旋转或轻微变形

公共成员函数

  1. compute(InputArray inputArr, OutputArray outputArr)

计算输入图像的 Marr-Hildreth 哈希值。
参数说明:

参数类型描述
inputArrInputArray输入图像,支持灰度图 (CV_8UC1) 或彩色图 (CV_8UC3)
outputArrOutputArray输出的哈希值,类型为 CV_8U 的一维 Mat
示例:
Mat hash;
marr_hash->compute(image, hash);
  1. compare(const Mat& hashOne, const Mat& hashTwo)

比较两个哈希值之间的差异,返回 汉明距离(Hamming Distance)。
参数说明:

参数类型描述
hashOneconst Mat&第一个哈希值
hashTwoconst Mat&第二个哈希值
返回值:
  • 返回两个哈希之间的 汉明距离
  • 值越小表示图像越相似

示例:

double distance = marr_hash->compare(hash1, hash2);
if (distance < threshold) {std::cout << "图像相似" << std::endl;
}

代码示例

#include <opencv2/opencv.hpp>
#include <opencv2/img_hash.hpp>
#include <iostream>using namespace cv;
using namespace cv::img_hash;
using namespace std;int main()
{// 加载图像(支持彩色图或灰度图)Mat img1 = imread("/media/dingxin/data/study/OpenCV/sources/images/img1.jpg", IMREAD_COLOR);Mat img2 = imread("/media/dingxin/data/study/OpenCV/sources/images/img2.jpg", IMREAD_COLOR);if (img1.empty() || img2.empty()) {cerr << "无法加载图像!" << endl;return -1;}// 创建 MarrHildrethHash 对象(可选参数 sigma)Ptr<MarrHildrethHash> marr_hash = MarrHildrethHash::create(1.2); // sigma = 1.2// 计算哈希值Mat hash1, hash2;marr_hash->compute(img1, hash1);marr_hash->compute(img2, hash2);// 比较哈希值(返回汉明距离)double distance = marr_hash->compare(hash1, hash2);cout << "汉明距离: " << distance << endl;if (distance < 10) {  // 可根据实际调整阈值cout << "图像非常相似!" << endl;} else {cout << "图像不相似。" << endl;}return 0;
}

运行结果

汉明距离: 9
图像非常相似!
http://www.dtcms.com/a/270532.html

相关文章:

  • 基于DeepSeek构建的openGauss AI智能优化助手:数据库性能提升新利器
  • 微软 Bluetooth LE Explorer 实用工具的详细使用分析
  • 【DOCKER】-3 数据持久化
  • OpenCV图像增强秘籍:高通滤波与特效艺术
  • Web 前端框架选型:React、Vue 和 Angular 的对比与实践
  • PiscTrace深蹲计数功能实现:基于 YOLO-Pose 和人体关键点分析
  • 【python处理excel】B列单元格中的内容都是回车换行的,把这些信息拆成多行多列,并且把A列对应的信息带过去。
  • A模块 系统与网络安全 第四门课 弹性交换网络-2
  • C#正则表达式全面详解:从基础到高级应用
  • 跨部门协作难以对齐项目进度,如何促进协同
  • Rust #[] 语法
  • PHP语法高级篇(一):日期时间处理和包含文件
  • 【系统与工具】Linux——Linux简介、安装、简单使用
  • 详解Kafka重平衡机制详解
  • MySQL8.0基于GTID的组复制分布式集群的环境部署
  • mysql互为主从失效,重新同步
  • 超越公有云:在裸金属服务器上构建低成本、高性能的静态资源服务
  • 创客匠人:创始人 IP 打造中 “放下身段” 的深层逻辑
  • 身份证识别api-便捷生活与安全社会的双重保障
  • 神经网络简介
  • 鸿蒙商城开发:ZKmall开源商城系统特性适配与性能优化
  • 7.神经网络基础
  • 【JavaEE进阶】图书管理系统(未完待续)
  • 【学习笔记】OkHttp源码架构解析:从设计模式到核心实现
  • 保姆级安装 Ruby 环境下载及安装教程, RubyInstaller下载及安装教程
  • Javaweb - 10.7 乱码和路径问题
  • 影石(insta360)X4运动相机视频删除的恢复方法
  • SHA-256算法详解——Github工程结合示例和动画演示
  • 中望CAD2026亮点速递(5):【相似查找】高效自动化识别定位
  • Python(30)基于itertools生成器的量子计算模拟技术深度解析