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)

Also fülle ich meine beiden Listen mit Bildern. Jetzt möchte ich die Bilder der beiden Listen nacheinander nach demselben Index vergleichen, zum Beispiel:
listIm1 [0] mit listImg2 [0]
listIm1 [1] mit listImg2 [1]
und so weiter ... und das ist der Code:

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

Aber erhalte den Fehler:

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

es scheint, dass imgcompare.is_equal () nicht mit Listen funktioniert. Gibt es ein pythonisches Hilfsmittel, damit es funktioniert?

0
mario Letterman 18 Apr. 2018 im 00:10

3 Antworten

Beste Antwort

Schon seit

 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

Ich denke du suchst so etwas:

Bearbeiten:

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

Und es ist besser, wenn len (listIm1) == len (listIm2)

1
Peko Chan 18 Apr. 2018 im 07:58

Das Problem hierbei ist, dass Sie versuchen, den Index von listIm1 mithilfe von item abzurufen. Was Sie tun möchten, ist ein range() wie:

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

Wie @Matt hervorhob, funktioniert dies nur, wenn Sie vorher wissen, dass die Listen dieselbe Länge haben. Andernfalls wird ein Indexfehler ausgegeben.

1
Colin Ricardo 17 Apr. 2018 im 21:30

Sie verwenden für jede Schleife eine, die jedes Element in Ihrer bereitgestellten Liste listIm1 erfasst und in einer temporären Variablen item speichert. Anschließend übergeben Sie item (eine Zeichenfolge) als Indizieren Sie beide Listen. Indizes einer Liste müssen eine Ganzzahl sein, und das ist der Fehler, den Sie erhalten.

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

Dieser Code verwendet zwei für jede Schleife. Er betrachtet jedes Element in beiden Listen und verwendet sie als Argumente für Ihre Methode.

0
Matt 17 Apr. 2018 im 21:24