ImageHash - Python 图像哈希库
文章目录
- 一、关于 ImageHash
- 1、项目概览
- 2、相关链接资源
- 二、技术原理
- 三、安装配置
- 四、基础用法
- 五、算法示例
- 1、图标数据集测试
- 2、艺术品数据集测试
- 六、哈希存储与检索
- 1、字符串转换
- 2、数据库优化方案
- 七、参考资源
- 算法文献
- 同类项目
一、关于 ImageHash
1、项目概览
Python 实现的图像哈希计算库,支持检测视觉相似图像。
与加密哈希(如 MD5/SHA-1)不同,当图像内容轻微变化时,生成的哈希值仍保持相似。
支持算法:
- 均值哈希(Average hashing)
- 感知哈希(Perceptual hashing)
- 差分哈希(Difference hashing)
- 小波哈希(Wavelet hashing)
- HSV 色彩哈希(colorhash)
- 抗裁剪哈希(Crop-resistant hashing)
2、相关链接资源
- GitHub:https://github.com/JohannesBuchner/imagehash
- PyPI:https://pypi.python.org/pypi/ImageHash
- 作者:JohannesBuchner
二、技术原理
图像哈希通过分析图像结构特征生成指纹:
- 亮度分析算法(均值/感知/差分/小波哈希):基于灰度信息
- 色彩哈希算法:分析颜色分布和黑白比例(忽略位置信息)
三、安装配置
pip install imagehash
依赖库:Pillow、numpy、scipy.fftpack
四、基础用法
from PIL import Image
import imagehash# 生成哈希
hash1 = imagehash.average_hash(Image.open('test.png'))
hash2 = imagehash.average_hash(Image.open('peppers.png'))# 比较哈希
print(hash1 == hash2) # False
print(hash1 - hash2) # 汉明距离 33
可通过调整 hashsize
参数提高敏感度,示例脚本 find_similar_images
可查找相似图片。
五、算法示例
1、图标数据集测试
7441 个 GitHub 图标测试结果:
- phash 结果
- dhash 结果
- colorhash 结果
- average_hash 结果
2、艺术品数据集测试
109259 件艺术品测试结果:
- phash 结果
- dhash 结果
- colorhash 结果
- average_hash 结果
六、哈希存储与检索
1、字符串转换
# 序列化与反序列化
hash_str = str(imagehash.phash(Image.open('test.png')))
restored_hash = imagehash.hex_to_hash(hash_str)
2、数据库优化方案
推荐使用 PostgreSQL + pg-spgist_hamming 扩展,教程见:imagehash-reverse-image-search-tutorial
七、参考资源
算法文献
- aHash 算法
- dHash 算法
- wHash 算法
- 抗裁剪哈希论文
同类项目
- blockhash-python
- OpenCV img_hash
伊织 xAI 2025-09-18(四)