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

相关文章:

  • 字符串大小比较的方式|函数的多返回值
  • Softhub软件下载站实战开发(十六):仪表盘前端设计与实现
  • 【DOCKER】-2 docker基础
  • 车载以太网-TC8测试-UT(Upper Tester)
  • 基于物联网的智能交通灯控制系统设计
  • RAGflow图像解析与向量化分析
  • 基于模板设计模式开发优惠券推送功能以及对过期优惠卷进行定时清理
  • 文献学习|全面绘制和建模水稻调控组景观揭示了复杂性状背后的调控架构。
  • 【洛谷题单】--顺序结构(一)
  • MyBatis-Plus:深入探索与最佳实践
  • 《UE5_C++多人TPS完整教程》学习笔记42 ——《P43 瞄准(Aiming)》
  • 【Linux服务器】-安装ftp与sftp服务
  • JavaScript基础篇——第二章 类型转换与常见错误解析
  • openEuler2203sp4-vg磁盘组中剔除磁盘
  • 11款常用C++在线编译与运行平台推荐与对比
  • 【PyTorch】PyTorch中torch.nn模块的激活函数
  • 初识mysql(一)
  • Spring Bean 的生命周期
  • Python入门Day5
  • 数据结构*搜索树
  • CI/CD — DevOps概念之实现k8s持续交付持续集成(一)
  • Maven 打包排除特定依赖的完整指南(详细方法 + 示例)
  • -温差双八无碳小车cad【14张】+三维图+设计说明书+总装配图+绛重
  • 高版本的MacOS如何降级?
  • Qt:图片切割
  • numpy数据分析知识总结
  • 使用Node.js搭建Web应用有哪些注意事项?
  • LocalStorage和SessionStorage的区别和应用
  • 零基础 Qt 6 在线安装教程
  • C++11 算法详解:std::copy_if 与 std::copy_n