2016-12-28 3 views
0

Я намерен показывать список изображений в каталоге один за другим с помощью Python PIL (закрыв предыдущее окно изображения перед открытием следующего окна изображения). Вот мой код, который, похоже, не работает. Он открывает изображения один за другим, не закрывая предыдущее окно.Отображать изображения один за другим с использованием библиотеки PIL PILO

def show_images(directory): 
    for filename in os.listdir(directory): 
     path = directory + "/" + filename 
     im = Image.open(path) 
     im.show() 
     im.close() 
     time.sleep(5) 

Может ли кто-нибудь помочь мне с этим? Я настаиваю на использовании библиотеки PIL.

+0

, если библиотеки не является проблемой для вас, то вы можете попробовать Библиотека 'cv2', где вы можете использовать cv2.waitKey (0), чтобы сеять изображения в цессии. – Giridhur

+0

PIL вызывает внешнюю программу просмотра для отображения изображения. Какой из них он использует для вас? Вероятно, это либо 'display', либо' xv'; доступны ли они в вашей системе и в вашем PATH? –

+0

Метод «.show» PIL - это просто удобная функция, позволяющая разработчику просматривать изображения во время написания кода, но не предназначена для отображения изображений пользователю. Если вашей программе необходимо управлять отображением изображения, вы должны использовать графический интерфейс. Это достаточно легко сделать в Tkinter. –

ответ

-2

PIL.show() вызывает внешнюю программу для отображения изображения, после его хранения во временном файле может быть средством просмотра изображений GNOME или даже встроенным matplotlib, если вы используете iPython notebook.

Из того, что я собираю из их документации PIL здесь, я вижу, что единственный способ сделать это - сделать pkill через вызов os.system() или вызов подпроцесса.

Таким образом, вы могли бы изменить свою программу что-то вроде этого:

import os 
def show_images(directory): 
for filename in os.listdir(directory): 
    path = directory + "/" + filename 
    im = Image.open(path) 
    im.show() 
    os.system('pkill eog') #if you use GNOME Viewer 
    im.close() 
    time.sleep(5) 

Если у вас нет необходимости использовать PIL исключительно, вы можете попробовать переключиться на другие библиотеки, такие как Matplotlib для показа, как описано здесь Matplotlib, где простой вызов, таких как plot.close() закроет фигуру, и plot.clear() очистит цифру

import matplotlib.pyplot as plt 

def show_images(directory): 
for filename in os.listdir(directory): 
    path = directory + "/" + filename 
    im = Image.open(path) 
    plt.imshow(im) 
    plt.show() 
    plt.clf() #will make the plot window empty 
    im.close() 
    time.sleep(5) 
+0

Это, похоже, не работает, оно просто запускает новое окно изображения, не убивая предыдущий. –

+0

Вы можете попробовать использовать matplotlib для отображения изображений? теперь отредактирует и добавит новый фрагмент. – Giridhur

 Смежные вопросы

  • Нет связанных вопросов^_^