You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对相似imagehash值高效分组以实现同类图片归类

图片感知哈希相似分组实现方案

核心利用imagehash内置的汉明距离计算能力,两个ImageHash实例直接相减即可得到汉明距离,通常汉明距离≤阈值(常用3~8)即判定为相似图片。

以下是可直接运行的实现代码:

from PIL import Image
import imagehash

# 相似判定阈值:可根据业务对相似度的要求调整,常用范围3~8
SIMILAR_THRESHOLD = 5

# 原有哈希计算逻辑(修正原代码笔误img1_has → img1_hash)
img1_hash = imagehash.average_hash(Image.open('data/image1.jpg'))
img2_hash = imagehash.average_hash(Image.open('data/image2.jpg'))
img3_hash = imagehash.average_hash(Image.open('data/image3.jpg'))
img4_hash = imagehash.average_hash(Image.open('data/image4.jpg'))
print(img1_hash, img2_hash, img3_hash, img4_hash)
# 输出示例:81c38181bf8781ff, 81838181bf8781ff, 81838181bf8781ff, ff0000ff3f00e7ff

hash_lst = [['img1', img1_hash], ['img2', img2_hash], ['img3', img3_hash], ['img4', img4_hash]]

# 分组逻辑
groups = []
for img_name, current_hash in hash_lst:
    found = False
    # 遍历已有分组,判断是否和分组代表哈希相似
    for group in groups:
        if current_hash - group['represent_hash'] <= SIMILAR_THRESHOLD:
            group['img_list'].append(img_name)
            found = True
            break
    # 无匹配分组则新建分组,以当前哈希为分组代表
    if not found:
        groups.append({
            'represent_hash': current_hash,
            'img_list': [img_name]
        })

# 提取仅包含图片名的最终结果
result = [group['img_list'] for group in groups]
print(result)
# 输出:[['img1', 'img2', 'img3'], ['img4']]

适用场景说明

  • 千级以内的小数据量:上述实现完全满足需求,逻辑简单易维护。
  • 万级及以上的大数据量:可以用局部敏感哈希(LSH)或者VP树(Vantage Point Tree) 优化查询效率,将时间复杂度从O(n²)降低到近似O(n log n),避免全量遍历分组。

内容的提问来源于stack exchange,提问作者minholee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:54:03