Як я можу відобразити зображення з файлу в Блокноті Юпітера?


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.
tomyun

65
це не відображає зображення, якщо всередині циклу
muon

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

3
Це працює лише для мене, якщо я передаю зображення (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")
ccpizza

215

Якщо ви намагаєтеся відобразити зображення таким чином всередині циклу, тоді вам потрібно обернути конструктор зображення методом відображення.

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
Чому? (Не кажіть мені, що в іншому випадку це не працює. Будь ласка, поясніть, для чого потрібен цей виклик "показ" у циклі, але ні, якщо ви просто розповсюджуєте одне зображення).
Кріс

10
Оскільки Ноутбуки IPython показують лише останнє повернене значення в комірці, тому щоразу, коли у вас є два виходи з однієї комірки, вам потрібно буде використовувати метод 'display'. Детальніше див. У цьому питанні .
DrMcCleod

1
Ти мій герой - я шукав цього два дні.
ZaxR

1
Це чудово. Як зробити так, щоб наступне зображення замінило існуюче, як-от для анімаційного ефекту, коли зображення змінюється з часом?
блаженство

2
Мені було цікаво, як ми могли плитку зображень? Наприклад, для показу групи зображень 4x4.
gmagno

31

Зауважте, до цих пір опубліковані рішення працюють лише для png та jpg!

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

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

2
помістіть зображення в ту саму папку, що й ноутбук Юпітера, або замість "test.gif" використовуйте "родич / шлях / тест.gif"
Philipp Schwarz

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-код у розділі розмітки: example:

 <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.