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]
找到了文件。我找到了,首先,您必须声明您的列表,以便附加