我的问题稍有改动 - 请参阅下面的更新
我想用Python比较两个不同的图像。目的是找到两个图像中存在的像素颜色值。
我写了一个小程序来收集图像中的所有像素颜色值。目前我有一个字典/ output.txt,如下所示:
{"pixels": [[232, 251, 255], [231, 250, 254], [230, 249, 253], [230, 249, 252], [230, 250, 251], [230, 249, 254], [230, 249, 255], [230, 250, 255], [228, 250, 254], [228, 249, 254], [228, 249, 254], [229, 248, 252], [230, 249, 253], [230, 249, 253], [231…}
现在我的问题是:如何将这些值与另一个图像的值进行比较,看看其中是否有相同的颜色值?
谢谢!
更新
我想更新我的初步问题。我现在有两个(或多或少复杂)列表。第一个包含图像名称和十六进制的图像像素颜色。所以它看起来像这样:
{
0: {'hex': ['#c3d6db', '#c7ccc0', '#9a8f6a', '#8a8e3e'], 'filename': 'imag0'},
1: {'hex': ['#705b3c', '#6a5639', '#442f1e', '#4a3d28'], 'filename': 'img-xyz'},
…
}
第二个字典包含许多十六进制值作为键,id作为值。它看起来像:
{'#b0a7aa': '9976', '#595f5b': '19367', '#9a8f6a': '24095'…}
现在我想做的是查看我的图像(第一个列表)中是否存在与第二个列表中的一个匹配的颜色值。如果是这样,那么我想知道第一个列表中的文件名和第二个列表中匹配键的值(id)。
我怎么能实现这个目标?
答案 0 :(得分:3)
我首先尝试将列表列表转换为一组元组:
>>> t1 = {(r,g,b) for [r,g,b] in p1}
>>> t2 = {(r,g,b) for [r,g,b] in p2}
然后使用交集方法:
>>> t1.intersection(t2)
set([(231, 250, 254)])
答案 1 :(得分:1)
不是从其他程序返回列表列表,而是返回一组元组然后就可以了
set.intersection(pixels(image1), pixels(image2))
找到两个图像中存在的所有像素。