如何使用Python在两个不同的图像中找到两个相同的像素(颜色值)

时间:2016-11-15 15:58:46

标签: python image dictionary

我的问题稍有改动 - 请参阅下面的更新

我想用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)。

我怎么能实现这个目标?

2 个答案:

答案 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))

找到两个图像中存在的所有像素。