CSV-файл продолжается в строке несколько имен файлов изображений. Эти изображения визуализируются в grid
из tkinter
. На самом деле визуализация имеет тот же формат (положение имени файла изображений), что и файл csv.
В моем файле csv я пытаюсь найти подходящее имя файла для каждой строки. Если они совпадают в каждом ряду, должна быть нарисована зеленая граница. Если нет, то добавляется красная рамка.
Пример того, как может выглядеть мой CSV-файл (в коде с именем results.csv
):
a.jpg, b.jpg, a.jpg, c.jpg, d.jpg
x.jpg, y.jpg, y.jpg, y.jpg, z.jpg
Как я описал выше и для этого примера Я хочу нарисовать для первого ряда зеленые границы вокруг a.jpg
и для второго ряда вокруг изображения x.jpg
, так как эти изображения в строке совпадают.
Согласно этой логике c мой код выглядит так:
def visualize_results(feature):
"""Visualize result images in a grid like the original gui"""
with open("results.csv", 'r') as input:
reader = csv.reader(input, delimiter=',')
i = 0
for row in reader:
for j, col in enumerate(row):
tk.Label(text="", width=25).grid(row=0, column=j)
# dataset is a path to a dataset
# and col is the filename of an image in the csv file (as in the example a.jpg...)
image = Image.open(dataset + col)
image = image.resize((50, 50), Image.ANTIALIAS)
photo = ImageTk.PhotoImage(image)
# compare every id in each row and if same, draw a green border
if col in row[i]:
label = tk.Label(image=photo, width=50, height=50,
highlightthickness=4, highlightbackground="GREEN", borderwidth=0)
else:
label = tk.Label(image=photo, width=50, height=50,
highlightthickness=4, highlightbackground="RED", borderwidth=0)
label.image = photo # this line need to prevent gc
label.grid(row=i + 1, column=j)
i += 1
tk.mainloop()
Теперь с этим кодом я получаю исключение IndexError: list index out of range
. Почему это так и как я могу это изменить?