首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对相似散列值进行分组

对相似散列值进行分组
EN

Stack Overflow用户
提问于 2021-11-25 03:06:56
回答 1查看 49关注 0票数 0

我将图像更改为散列值,并尝试将具有相似散列值的图像分类到同一组中。

举个例子。

代码语言:javascript
复制
import imagehash

# img1, img2, img3 are same images
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_has, img2_hash, img3_hash, img4_hash)
>>> 81c38181bf8781ff, 81838181bf8781ff, 81838181bf8781ff, ff0000ff3f00e7ff

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

##
Grouping Code
##

输出:

代码语言:javascript
复制
[['img1', 'img2', 'img3'], ['img4']]

是否有有效分类的分组代码?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-11-25 03:39:12

下面的代码将给你一个不相似的元素列表。您可以调整0.5值来判断相似性。

代码语言:javascript
复制
from difflib import SequenceMatcher
from itertools import combinations

img1_hash = '81c38181bf8781ff'
img2_hash = '81838181bf8781ff'
img3_hash = '81838181bf8781ff'
img4_hash = 'ff0000ff3f00e7ff'

hash_lst = [img1_hash, img2_hash, img3_hash, img4_hash]

hash_comb_lst = list(combinations(hash_lst, 2))

def similar(a, b):
    return SequenceMatcher(None, a, b).ratio()

sim_hashes = []
for hashs in hash_comb_lst:
    if similar(hashs[0], hashs[1]) > 0.5:
        sim_hashes.append(hashs[0])
        sim_hashes.append(hashs[1])

diff_group = list(set(hash_lst) - set(sim_hashes))
simm_group = list(set(hash_lst) - set(diff_group))

您可以打印出diff_group,并将看到

代码语言:javascript
复制
print(diff group)

['ff0000ff3f00e7ff']

使用SequenceMatcher库并根据自己的喜好编辑代码。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70105351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档