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, прямо под кодом клетка, которая его произвела.