-2

我是 Python 的初学者,在我问这个问题之前,我努力在这里找到答案。我有不同的设计,有几张照片,我想比较它们的汉明距离。但我不想比较位于同一文件夹中的相同设计文件的图像。我基于一个名为 Imagehash 的库进行比较。在比较了不同的图像组合之后,我想保留那些具有最高汉明距离得分的图像。让我用一个简单的例子来解释我想要什么:

在文件夹 table 中有三个图像:table_1.jpg、table_2.jpg、table_3.jpg 在文件夹 chair 中有两个图像:chair_1.jpg、chair_2.jpg

我想要得到的是文件的文件路径(我可以这样做),以便稍后使用 Image.open() 和 imagehash.phash 函数。组合应如下所示:

(table_1.jpg, chair_1.jpg), (table_1.jpg, chair_2.jpg), (table_2.jpg, chair_1.jpg ), (table_2.jpg, chair_2.jpg), (table_3.jpg, chair_1.jpg), (table_3.jpg, chair_2.jpg)

然后我必须在“_”之后拆分,并使用 groupby 和 itemgetter,我猜

4

1 回答 1

0

你需要itertools.product计算你想要的元组:

from itertools import product

table = ['table_1.jpg', 'table_2.jpg', 'table_3.jpg']
chair = ['chair_1.jpg', 'chair_2.jpg']

print(list(product(table, chair)))
# [('table_1.jpg', 'chair_1.jpg'), ('table_1.jpg', 'chair_2.jpg'), ('table_2.jpg', 'chair_1.jpg'), ('table_2.jpg', 'chair_2.jpg'), ('table_3.jpg', 'chair_1.jpg'), ('table_3.jpg', 'chair_2.jpg')]

如果填充名称都在同一个列表中,您可以使用combinations并检查元素是否具有相同的开头:

from itertools import combinations
filenames = ['table_1.jpg', 'table_2.jpg', 'table_3.jpg', 'chair_1.jpg', 'chair_2.jpg']

print [(x,y) for x,y in combinations(filenames, 2) if x.split('_')[0] != y.split('_')[0]]
# [('table_1.jpg', 'chair_1.jpg'), ('table_1.jpg', 'chair_2.jpg'), ('table_2.jpg', 'chair_1.jpg'), ('table_2.jpg', 'chair_2.jpg'), ('table_3.jpg', 'chair_1.jpg'), ('table_3.jpg', 'chair_2.jpg')]
于 2017-03-27T11:05:55.700 回答