使用图像:imgcompare 不支持列表?

work with image: imgcompare does not support list?

import imgcompare
...

for filename in os.listdir(myPath):
     if filename.endswith(".png"):
         listIm1.append(filename)

for filename2 in os.listdir(myPath2):
     if filename2.endswith(".png"):
         listIm2.append(filename2)

所以我用图片填充了我的两个列表,现在我想按照相同的索引逐一比较两个列表的图像,例如:
listIm1[0] 和 listImg2[0 ]
listIm1[1] 和 listImg2[1]
等等......这就是代码:

for item in listIm1:
        ifSame = imgcompare.is_equal(listIm1[item],listIm2[item],tolerance=2)
        print ifSame

但得到错误:

same = imgcompare.is_equal(listIm1[item], listIm2[item], tolerance=2)
TypeError: list indices must be integers, not str

it seems that imgcompare.is_equal() does not work with lists, is there some pythonic expedient to make it works?

您正在使用 for each 循环,它获取您提供的列表 listIm1 中的每个元素并将其存储在临时变量 item 中,然后您传递 item(这是一个字符串)作为两个列表的索引。列表的索引必须是整数,这就是您遇到的错误。

for dir1_file in listIm1:
    for dir2_file in listIm2:
        ifSame = imgcompare.is_equal(dir1_file,dir2_file,tolerance=2)
        print ifSame

此代码使用两个 for each 循环,它查看两个列表中的每个元素并将它们用作您的方法的参数。

因为

 if filename2.endswith(".png"):
         listIm2.append(filename2)

for item in listIm1:
        # item = "someimagine.png"
 ifSame = imgcompare.is_equal(listIm1[item],listIm2[item],tolerance=2)
        #listIm1[someimagine.png] is what you are asking => retrun Type Error

我猜你正在寻找这样的东西:

编辑:

import os

for filename in os.listdir(myPath):
    if filename2.endswith(".png"):
       img_path = os.path.join(myPath,filename2)  
       listIm2.append(img_path)

listIm1 = [] 
listIm2 = []
for i in range(len(listIm1)):

     ifSame = imgcompare.is_equal(listIm1[i],listIm2[i],tolerance=2)
     print ifSame

如果 len(listIm1) == len(listIm2)

会更好

这里的问题是您试图通过使用 item 获取 listIm1 的索引。你想要做的是使用 range(),例如:

for i in range(len(listIm1)):
            ifSame = imgcompare.is_equal(listIm1[i],listIm2[i],tolerance=2)

正如@Matt 指出的那样,这只有在您事先知道列表长度相同的情况下才有效,否则会抛出索引错误。