我将图像更改为散列值,并尝试将具有相似散列值的图像分类到同一组中。
举个例子。
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
##输出:
[['img1', 'img2', 'img3'], ['img4']]是否有有效分类的分组代码?
谢谢
发布于 2021-11-25 03:39:12
下面的代码将给你一个不相似的元素列表。您可以调整0.5值来判断相似性。
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,并将看到
print(diff group)
['ff0000ff3f00e7ff']使用SequenceMatcher库并根据自己的喜好编辑代码。
https://stackoverflow.com/questions/70105351
复制相似问题