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

Python 使用图像:imgcompare不支持列表?,python,list,image-comparison,Python,List,Image Comparison,导入imgcompare … 因此,我用图像填充两个列表,现在我想按照相同的索引逐个比较这两个列表的图像,例如: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 = im

导入imgcompare


因此,我用图像填充两个列表,现在我想按照相同的索引逐个比较这两个列表的图像,例如:
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
似乎imgcompare.is_equal()不适用于列表,是否有一些Python的权宜之计 工作


您使用的是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循环,它查看两个列表中的每个元素,并将它们用作方法的参数。

您正在使用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)

 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)

则更好。这里的问题是,您试图通过使用
项来获取
listIm1
的索引。您要做的是使用
范围()
,例如:

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

正如@Matt所指出的,只有当您事先知道列表的长度相同时,这才有效,否则它将抛出索引错误

这里的问题是,您试图使用
获取
列表im1
的索引。您要做的是使用
范围()
,例如:

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


正如@Matt所指出的,只有当您事先知道列表的长度相同时,这才有效,否则它将抛出索引错误

小心!这假设listIm1和listIm2的长度相同!是的,没错。将更新问题以反映这一点。@colin和您的代码有错误:
IOError:[Errno 2]没有这样的文件或目录:“image.png”
。但是对于范围内的i(len(listIm1)):print listIm1[i]
have:image.png,image2.png,…imgcompare正在尝试查找名为“image.png”的文件。如果出现该错误,则表示当前目录中没有名为image.png的文件。当您在列表中追加时,请尝试使用
listIm1.append(os.path.abspath(filename))
listIm2.append(os.path.abspath(filename))
instead相当大,是一个特定的部分?小心!这假设listIm1和listIm2的长度相同!是的,没错。将更新问题以反映这一点。@colin和您的代码有错误:
IOError:[Errno 2]没有这样的文件或目录:“image.png”
。但是对于范围内的i(len(listIm1)):print listIm1[i]have:image.png,image2.png,…imgcompare正在尝试查找名为“image.png”的文件。如果出现该错误,则表示当前目录中没有名为image.png的文件。在添加列表时,请尝试使用
listIm1.append(os.path.abspath(filename))
listIm2.append(os.path.abspath(filename))
institud非常大,是一个特定的部分?我想比较两个具有相同索引的列表中的图像,这会比较第一个列表的第一个索引和第二个列表的所有索引,依此类推,对吗?你是正确的。这将比较dir1中的每个文件和dir2中的每个文件。如果您想使用相同的索引比较两个列表,我建议使用@colin提供的答案。你只需确保你的两个列表大小相同,并且顺序符合你的要求。我试图使用科林的答案,但出现了一个错误
IOError:[Errno 2]没有这样的文件或目录:“image.png”
,即使文件存在。我想比较两个列表中具有相同索引的图像,这会比较第一个列表的第一个索引和第二个列表的所有索引,依此类推,对吗?你是正确的。这将比较dir1中的每个文件和dir2中的每个文件。如果您想使用相同的索引比较两个列表,我建议使用@colin提供的答案。你只需要确保你的两个列表大小相同,并且顺序符合你的要求。我试图使用科林的答案,但出现了一个错误
IOError:[Errno 2]没有这样的文件或目录:“image.png”
,即使文件存在。与上面相同的错误:
IOError:[Errno 2]没有这样的文件或目录:'image.png'
,但是在范围(len(listIm1)):print listIm1[i]文件中找到了。我知道了,首先你必须声明你的列表以便将图像附加到它们,使用
listIm1=[]
listIm1=[]
,我已经更新了答案,但是得到了相同的错误
没有这样的文件或目录:'image.png'
,即使文件仍然存在。好的,现在如果图像不在同一目录中,您可能需要声明完整路径,例如
导入os
os.path.join(“您的路径目录,listIm1[i])如果打印,您将得到“c:\yourpath\image.png”它应该可以工作,我已经编辑了上面的anwser我缺少了一条基本指令os.chdir(mypath),所以你的答案是正确的。与上面相同的错误:
IOError:[Errno 2]没有这样的文件或目录:'image.png'
,但是使用了
for I in range(len(listIm1)):print listIm1[I]
找到了文件。我找到了,首先,您必须声明您的列表,以便附加