感知哈希算法(Perceptual hash algorithm)的OpenCV实现

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

1.前言

 

        目前“以图搜图”的引擎越来越多,可参考博文:

        http://blog.csdn.net/forthcriminson/article/details/8698175

        此篇博文中列出了很多“以图搜图”的引擎,之前很好奇他们是如何进行检索的,偶然间看到了一篇博客,上面说Google和Tineye主要利用的算法是感知哈希算法(Perceptual hash algorithm),它的作用是对每张图片生成一个"指纹"(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似,里面介绍的原理也比较简单,正好目前也在做图像检索方面的课题,就用OpenCV实现了一下,供大家参考,本篇博文主要介绍如何通过OpenCV实现均值Hash和pHash算法,基本原理和流程会在代码的注释中详细说明。

 

2.均值Hash算法

//均值Hash算法
 string HashValue(Mat &src)
 {
	 string rst(64,'\0');
	 Mat img;
	 if(src.channels()==3)
		 cvtColor(src,img,CV_BGR2GRAY);
 	else
 		img=src.clone();
       /*第一步,缩小尺寸。
         将图片缩小到8x8的尺寸,总共64个像素,去除图片的细节*/

        resize(img,img,Size(8,8));
 	/* 第二步,简化色彩(Color Reduce)。
 	   将缩小后的图片,转为64级灰度。*/

 	uchar *pData;
 	for(int i=0;i<img.r
OpenCV书签 #感知哈希算法的原理与相似图片搜索实验 感知哈希算法Perceptual Hash Algorithm,简称pHash)是哈希算法的一种,主要可以用来做以图搜索/相似图片搜索工作。原理:感知哈希算法(pHash)首先将原图像缩小成一个固定大小的像素图像,然后将图像转换为灰度图像,通过使用离散余弦变换(DCT)来获取频域信息。然后,根据DCT系数的均值生成一组哈希值。最后,利用两组图像的哈希值的汉明距离来评估图像的相似度。 阅读详情

相关推荐

理解三种图像相似的Hash算法

前言 本来想自己写一篇总结图像相似hash算法,无意之中看到一篇博客真的是总结地很精妙。感觉自己远远不及,于是转载过来并添以补充代码实现。 原文链接:https://www.cnblogs.com/Kalafinaian/p/11260808.html 度量两张图片的相似度有许多算法,本文讲介绍工程领域中最常用的图片相似度算法之一——Hash算法Hash算法准确的说有三种,分别为平均哈希算法(a...

知远pimo的博客 7100

哈希算法之pHash算法

1.pHash算法 pHash中文叫感知哈希算法,通过离散余弦变换(DCT)降低图片频率,相比aHash有更好鲁棒性。 基本原理: (1)缩小尺寸。将图片缩小为32*32大小。 (2)灰度化处理。 (3)计算DCT,并选取左上角8*8的矩阵。DCT是一种特殊的傅立叶变换,将图片从像素域变换为频率域,并且DCT矩阵从左上角到右下角代表越来越高频率的系数,但是除左上角外,其他地方的系数为0或接近0,因此只保留左上角的低频区域。 (4)计算DCT均值。 (5)哈希值计算。将每个DCT值,与平均值进行比较。大于或

wyyang2的博客 5814

图像处理中的pHash解析与对比

pHash算法是一种用于图像处理的算法,它通过生成图像的哈希值来比较图像的相似程度。通过比较两个图像的pHash值的汉明距离,可以得到它们的相似度。pHashPerceptual Hash)是一种用于图像处理的算法,它可以生成图像的哈希值,并通过比较哈希值来判断图像的相似程度。pHash算法主要基于图像感知哈希,通过提取图像的特征信息,生成表示图像内容的哈希值。通过上述步骤,pHash算法可以将图像转换为一个64位的二进制哈希值,用于表示图像的特征信息。计算平均值:计算缩减后的DCT系数的平均值。

UkkElm的博客 756

感知哈希算法

感知哈希算法是一类哈希算法的总称,其作用在于生成每张图像的“指纹”(fingerprint)字符串,比较不同图像的指纹信息来判断图像的相似性。结果越接近图像越相似。感知哈希算法包括均值哈希(aHash)、感知哈希(pHash)和dHash(差异值哈希)。 aHash速度较快,但精确度较低;pHash则反其道而行之,精确度较高但速度较慢;dHash兼顾二者,精确度较高且速度较快。 在得到64位hash值后,使用汉明距离量化两张图像的相似性。汉明距离越大,图像的相似度越小,汉明距离越小,图像的相似度越大。

Bruce_0712的博客 5174

感知哈希算法Perceptual hash algorithm以图搜图

1.序 目前“以图搜图”的引擎越来越多,可参考博文: http://blog.csdn.net/forthcriminson/article/details/8698175 此篇博文中列出了很多“以图搜图”的引擎,之前很好奇他们是如何进行检索的,偶然间看到了一篇博客,上面说Google和Tineye主要利用的算法感知哈希算法(Perceptua

wei_god的专栏 1万+

感知哈希算法(perceptual hash algorithm)

感知哈希算法(perceptual hash algorithm),它的作用是对每张图像生成一个“指纹”(fingerprint)字符串,然后比较不同图像的指纹。结果越接近,就说明图像越相似。 实现步骤: 1.      缩小尺寸:将图像缩小到8*8的尺寸,总共64个像素。这一步的作用是去除图像的细节,只保留结构/明暗等基本信息,摒弃不同尺寸/比例带来的图像差异; 2.      简化色

3677

感知哈希算法Perceptual hash algorithm

1.前言         目前“以图搜图”的引擎越来越多,可参考博文:         http://blog.csdn.net/forthcriminson/article/details/8698175         此篇博文中列出了很多 “以图搜图”的引擎,之前很好奇他们是如何进行检索的,偶然间看到了一篇博客,上面说Google和Tineye主要利用的算法感知哈希算法

thankyvision 3336

两张图像相似度比对,Xcode+OpenCV+C++,利用哈希感知算法Perceptual hash algorithm

简单介绍一下哈希感知算法: “感知哈希算法”(Perceptual hash algorithm),它的作用是对每张图片生成一个"指纹"(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似。 算法步骤: 第一步,缩小尺寸。 最快速的去除高频和细节,只保留结构明暗的方法就是缩小尺寸。 将图片缩小到8x8的尺寸,总共64个像素。摒弃不同尺寸、比例带来的图片差异。 如这张图片: 处理前: 处理后(为方便查看,这里将图片放大了): 第二步,简化色彩。 将缩小后的图片,转为64级灰

weixin_43275631的博客 2433

c4.5算法python实现_使用openCV和Python实现图像哈希(hash算法

之前介绍了许多图像比对的算法,这里再介绍一个算法,叫感知哈希算法perceptual hash algorithm, 它的作用是对每张图像生成一个“指纹”字符串,然后比较不同图像的指纹。结构越接近,说明图像越相似。哈希算法步骤图解这个算法常用于图像整理,归类上,比如快速整理手机中的照片文件夹子。该算法的优点明显,相对于其它算法实现起来比较简单,且速度快,准确率高。图像哈希或者叫感知哈希包括以下两...

weixin_39623350的博客 300

感知哈希算法:pHash算法实现图像相似度比较(附完整c++代码)

数字内容安全课实验 感知哈希算法 在浏览器的图片搜索中,用户可以上传一张图片,浏览器显示因特网中与此图片相同或者相似的图,实现这种功能的关键技术叫做"感知哈希算法"(Perceptual Hash Algorithm), 意思是为图片生成一个指纹(字符串格式), 两张图片的指纹越相似, 说明两张图片就越相似。感知哈希算法是一类算法的总称,包括 aHash:平均值哈希 pHash感知哈希 dHa...

huhuhuhu0908的博客 1万+

实现感知哈希算法

感知哈希算法Perceptual Hashing)是一种图像相似度比较的算法,可以快速计算并比较图像的哈希值,判断两个图像的相似程度。感知哈希算法的基本原理是将图像转换为灰度图,并将其缩小为一个固定大小的图像。然后,通过计算图像的均值,将图像中的每个像素点与均值进行比较,得到一个布尔值序列,形成图像的哈希值。通过实现感知哈希算法,我们可以快速计算图像的哈希值,并比较图像的相似程度。需要注意的是,哈希值的相似度是通过比较两个哈希值中对应位的相等情况来计算的。然后,通过缩小图像尺寸为。

CodeByte的博客 176

OpenCV进行图像相似度对比的几种办法

对计算图像相似度的方法,本文做了如下总结,主要有三种办法: 1.PSNR(Peak Signal to Noise Ratio)峰值信噪比,一种全参考的图像质量评价指标。 简介: http://www.cnblogs.com/vincent2012/archive/2012/10/13/2723152.html PSNR是最普遍和使用最为广泛的一种图像客观评价指标,然而它是基于对应像素点

固本培元的专栏 5268

微信小游戏辅助神器:如何让加减大师自动答题成为可能?

你是否曾在微信小游戏中面对快速闪过的数学题目感到手忙脚乱?是否想过让计算机代替你完成那些重复性的游戏操作?weixin-game-helper正是这样一个开源解决方案——它通过图像识别和自动化技术,让《加减大师》等微信小游戏实现自动答题,提升游戏效率的同时,也展示了Python自动化编程的巧妙应用。 ## 探索游戏辅助的核心价值:从手动到自动的转变 ### 为什么需要游戏自动化? 微信小游戏

gitblog_02138的博客 451

感知哈希算法(pHash算法

原理第一步,缩小尺寸。 将图片缩小到8x8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。第二步,简化色彩。 将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。第三步,计算平均值。 计算所有64个像素的灰度平均值。第四步,比较像素的灰度。 将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小

纸上得来终觉浅 7608

图形相似度比较(图形检索)学习笔记——pHash算法图像感知算法

问题来源 有一活动,临摹油画,然后拍照上传。判断与原画的相似度,相似度越高,分数就越高。 作为技术男,看到这个,第一反应当然是思考怎么实现这一功能啦。由于玩过opencv,所以第一反应是利用opencv的sift获取特征点集合,然后比较特征点集合,但是如何比较特征点集合一致就成了问题,一致找不到比较好的方法,后来在网上查了一下,发现比较图案的方法还不少。 ...

FUNCO_小风 1万+
上一篇: 只要有心,处处皆美景——南京清晨
下一篇: 偶阵雨
ForTheDream83
博客等级 码龄17年 31粉丝 30原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值