python — Как отобразить несколько изображений из одной ячейки в блокноте Jupyter
спросил
Изменено 2 года, 1 месяц назад
Просмотрено 2к раз
Я пытаюсь отобразить серию изображений в ячейке блокнота Jupyter. Код выглядит так:
из pyplot импорта matplotlib имена_файлов = ['а', 'б', 'с'] для имени в именах файлов: изображение = cv2.imread(имя) pyplot.imshow (изображение)
Но то, что я получаю в этой ячейке блокнота, это только последнее отображаемое изображение, а не каждое из трех. Если я удаляю цикл и отображаю каждое изображение в отдельной ячейке, я вижу все изображения. Есть ли применение imshow мне не хватает?
- питон
- matplotlib
- jupyter-ноутбук
2
Функция pyplot. записывает в буфер только изображение, которое будет отображаться/сохраняться/и т. д. в последующих действиях (именно так вы можете использовать
imshow pyplot.title , pyplot.xlim и другие команды в последовательность, а затем иметь только один сюжет в конце всех из них).
Причина, по которой в Jupyter отображается изображение, заключается в том, что это последняя строка кода, выполняемая в ячейке, и Jupyter всегда пытается отобразить последний элемент, который он видит, если это поведение не отключено (обратите внимание, что pyplot.imshow фактически возвращает объект изображения, который можно отобразить — у Jupyter есть логика, которая пытается это сделать).
Если вы действительно просто хотите отображать эти элементы в цикле (в отличие от использования подграфиков или какого-либо другого способа построения составного изображения), вам нужно добавить дополнительную команду pyplot.show() :
из matplotlib импортировать диаграмму имена_файлов = ['а', 'б', 'с'] для имени в именах файлов: изображение = cv2.imread(имя) pyplot.imshow (изображение) pyplot.show ()
0
Вы также можете использовать подграфики для построения изображений, что позволяет, например, выровнять их по горизонтали:
из matplotlib import pyplot имена_файлов = ['а', 'б', 'с'] # создать экземпляры подзаговоров рис, оси = pyplot.subplots(1,3, figsize=(12,4)) для имени, топор в zip(file_names, axes.ravel()): изображение = cv2.imread(имя) # поместите изображение в подзаголовок ax.imshow (изображение [:,:,::-1])
Обратите внимание, что cv2 будет читать изображения в BGR , в то время как pyplot
RGB , поэтому ::-1 .1
Просто используйте pyplot.show() в цикле.
Если вы хотите сохранить каждый график отдельно, просто добавьте plt.clf() сразу после запуска цикла и добавьте что-то вроде _%d в имя изображения, чтобы просмотреть все изображения в цикле и сохранить их.
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
python — AWS SageMaker Jupyter Notebook: изображения не отображаются
В настоящее время я пытаюсь отобразить некоторые изображения с помощью AWS SageMaker, используя приложение Jupyter Notebook.
Однако все, что я пытаюсь сделать, это показать загруженные изображения. Я написал функцию для этого, но все, что у меня осталось, это индекс изображений и имя изображения при вызове функции.
Функция:
импортировать глобус
импортировать случайный
импортировать matplotlib.pyplot как plt
def get_random_image (каталог, условие):
заполнитель = ''
если условие == 'n':
заполнитель = "НОРМАЛЬНЫЙ"
Элиф условие == 'р':
заполнитель = 'ПНЕВМОНИЯ'
еще:
поднять исключение ("Извините, недопустимое условие")
#папка для просмотра изображений
папка = f"./data/chest_xray/{dir}/{placeholder}/*.jpeg"
img_paths = glob.glob(папка)
#папки имеют разное количество изображений в них
max_length = длина (img_paths)
randomNumber = random.randint(0, max_length)
для индекса, элемент в перечислении (img_paths, start = 1):
если индекс == случайное число:
#распечатать путь к изображению
печать (индекс, элемент)
#изображение из папки
изображение = plt.
imread (элемент)
readyImage = plt.imshow(изображение)
вернуть готовое изображение
Вызов функции:
get_random_image("train", "p")
Пример результата:
2078 ./data/chest_xray/train/PNEUMONIA/person522_virus_1041.jpeg
Я делал разные вещи от входа/выхода из системы до перезапуска ядра; только один вариант и это python 3 .
- Python
- Jupyter-ноутбук
- Amazon-Sagemaker
2
Вы должны добавить строку в первую ячейку (или перед первым вызовом plt.show()) блокнота:
%matplotlib встроенный
Это волшебная функция в IPython.
Согласно документации:
С помощью этого бэкенда вывод команд построения графика отображается встроенным во внешних интерфейсах, таких как блокнот Jupyter, прямо под кодом клетка, которая его произвела.
imread(имя)
pyplot.imshow (изображение)
pyplot.show ()
