Как я могу отобразить изображение из файла в Jupyter Notebook?


190

Я хотел бы использовать записную книжку IPython для интерактивного анализа некоторых диаграмм генома, которые я делаю с помощью GenomeDiagramмодуля Biopython . В то время как существует обширная документация о том, как использовать matplotlibдля получения встроенных графов в блокноте IPython, GenomeDiagram использует инструментарий ReportLab, который, я не думаю, поддерживается для встроенных графиков в IPython.

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

gd_diagram.write("test.png", "PNG")
display(file="test.png")

Однако я не могу понять, как это сделать - или знаю, возможно ли это. Так кто-нибудь знает, можно ли открывать / отображать изображения в IPython?

Ответы:


335

Из этого поста вы можете сделать следующее:

from IPython.display import Image
Image(filename='test.png') 

( официальные документы )


Лучше использовать общедоступный API без доступа к внутренним компонентам: from IPython.display import Imageдолжен работать с 0.13.
Томюн

65
это не отображает изображение, если внутри цикла
мюон

6
Большинство людей хотели бы получить ответ DrMcCleod.
AturSams

3
Это работает только для меня, если я передаю Image (filename = 'test.png') для отображения, как рекомендовано в теме ниже: from IPython.core.display import Image, display<b /> display(Image(filename='test.png'))
John Strong

1
Если вы хотите, чтобы изображение также отображалось в режиме презентации слайдов (с которым вы работаете jupyter nbconvert mynotebook.ipynb --to slides --post serve), тогда путь к изображению должен начинаться /так, чтобы он представлял собой абсолютный путь от корневого веб- ![alt text](/test.jpg "Some Title")
каталога

215

Если вы пытаетесь таким образом отобразить изображение внутри цикла, то вам нужно обернуть конструктор Image в метод отображения.

from IPython.display import Image, display

listOfImageNames = ['/path/to/images/1.png',
                    '/path/to/images/2.png']

for imageName in listOfImageNames:
    display(Image(filename=imageName))

1
Зачем? (Не говорите мне, что иначе это не сработает. Пожалуйста, объясните, почему этот вызов 'display' необходим в цикле, а не если вы просто отображаете одно изображение).
Крис

10
Поскольку записные книжки IPython показывают только последнее возвращаемое значение в ячейке, поэтому всякий раз, когда у вас есть два выхода из одной ячейки, вам нужно будет использовать метод display. Смотрите этот вопрос для более.
DrMcCleod

1
Ты мой герой - я искал это два дня.
ZaxR

1
Это круто. Как сделать так, чтобы следующее изображение заменяло существующее, как для анимированного эффекта, когда изображение меняется со временем?
Blissweb

2
Мне было интересно, как мы можем мозаичные изображения? Например, чтобы показать группу изображений 4х4.
Гманьо

31

Обратите внимание, что до сих пор размещенные решения работают только для png и jpg!

Если вы хотите, чтобы это было еще проще без импорта дополнительных библиотек, или вы хотите отобразить анимированный или не анимированный GIF-файл в блокноте Ipython. Преобразуйте строку, где вы хотите отобразить ее, в уценку и используйте этот хороший короткий взлом!

![alt text](test.gif "Title")

2
поместите изображение в ту же папку, что и блокнот Jupyter, или вместо «test.gif» используйте «родственник / путь / test.gif»
Филипп Шварц,

23

Это позволит импортировать и отобразить .jpgизображение в Jupyter (протестировано с Python 2.7 в среде Anaconda)

from IPython.display import display
from PIL import Image


path="/path/to/image.jpg"
display(Image.open(path))

Вам может понадобиться установить PIL

в Анаконде это можно сделать, набрав

conda install pillow

8

Благодаря этой странице я обнаружил, что это сработало, когда приведенные выше предложения не помогли:

import PIL.Image
from cStringIO import StringIO
import IPython.display
import numpy as np
def showarray(a, fmt='png'):
    a = np.uint8(a)
    f = StringIO()
    PIL.Image.fromarray(a).save(f, fmt)
    IPython.display.display(IPython.display.Image(data=f.getvalue()))

4

Вы можете использовать в HTML-код в разделе уценки: пример:

 <img src="https://www.tensorflow.org/images/colab_logo_32px.png" />

2

Более чистая версия Python3, в которой используются стандартные numpy, matplotlib и PIL. Слияние ответа для открытия с URL.

import matplotlib.pyplot as plt
from PIL import Image
import numpy as np

pil_im = Image.open('image.png') #Take jpg + png
## Uncomment to open from URL
#import requests
#r = requests.get('https://www.vegvesen.no/public/webkamera/kamera?id=131206')
#pil_im = Image.open(BytesIO(r.content))
im_array = np.asarray(pil_im)
plt.imshow(im_array)
plt.show()

2

Если вы хотите эффективно отображать большое количество изображений, я рекомендую использовать пакет IPyPlot

import ipyplot

ipyplot.plot_images(images_array, max_images=20, img_width=150)

введите описание изображения здесь

В этом пакете есть и другие полезные функции, где вы можете отображать изображения на интерактивных вкладках (отдельная вкладка для каждой метки / класса), что очень полезно для всех задач классификации ML.

введите описание изображения здесь


0

При использовании GenomeDiagramс Jupyter (iPython) самый простой способ отображения изображений - преобразование GenomeDiagram в изображение PNG. Это можно обернуть, используя объект IPython.display.Image, чтобы отобразить его в блокноте.

from Bio.Graphics import GenomeDiagram
from Bio.SeqFeature import SeqFeature, FeatureLocation
from IPython.display import display, Image
gd_diagram = GenomeDiagram.Diagram("Test diagram")
gd_track_for_features = gd_diagram.new_track(1, name="Annotated Features")
gd_feature_set = gd_track_for_features.new_set()
gd_feature_set.add_feature(SeqFeature(FeatureLocation(25, 75), strand=+1))
gd_diagram.draw(format="linear", orientation="landscape", pagesize='A4',
                fragments=1, start=0, end=100)
Image(gd_diagram.write_to_string("PNG"))

[См тетрадь]

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.