使用图像: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 指出的那样,这只有在您事先知道列表长度相同的情况下才有效,否则会抛出索引错误。
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 指出的那样,这只有在您事先知道列表长度相同的情况下才有效,否则会抛出索引错误。