Wie kann ich ein Bild aus einer Datei in Jupyter Notebook anzeigen?


190

Ich möchte ein IPython-Notizbuch verwenden , um einige Genomdiagramme, die ich mit dem Biopython- GenomeDiagramModul erstelle, interaktiv zu analysieren . Zwar gibt es umfangreich Dokumentation über die Verwendung matplotlibzu Graphen inline in IPython Notebook zu bekommen, verwendet GenomeDiagram den ReportLab Toolkit , das glaube ich nicht für die Inline - Grafik in IPython unterstützt wird.

Ich dachte jedoch, dass ein Weg, dies zu umgehen, darin bestehen würde, das Plot / Genom-Diagramm in eine Datei zu schreiben und dann das Bild inline zu öffnen, was das gleiche Ergebnis mit so etwas hätte:

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

Ich kann jedoch nicht herausfinden, wie das geht - oder weiß, ob es möglich ist. Weiß also jemand, ob Bilder in IPython geöffnet / angezeigt werden können?

Antworten:


332

Mit freundlicher Genehmigung dieses Beitrags können Sie Folgendes tun:

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

( offizielle Dokumente )


Es ist besser, die öffentliche API zu verwenden, ohne auf Interna zuzugreifen: from IPython.display import Imagesollte seit 0.13 funktionieren.
Tomyun

64
Dies zeigt kein Bild an, wenn es sich in einer Schleife befindet
Myon

6
Die meisten Leute würden die Antwort von DrMcCleod wollen.
AturSams

3
Dies funktioniert nur für mich, wenn ich Image (Dateiname = 'test.png') zur Anzeige übergebe, wie in einem Thread unten empfohlen: from IPython.core.display import Image, display<b /> display(Image(filename='test.png'))
John Strong

1
Wenn Sie möchten, dass das Bild auch im Präsentationsmodus für Folien angezeigt wird (mit dem Sie ausgeführt werden jupyter nbconvert mynotebook.ipynb --to slides --post serve), sollte der /![alt text](/test.jpg "Some Title")
Bildpfad

213

Wenn Sie versuchen, ein Bild auf diese Weise in einer Schleife anzuzeigen, müssen Sie den Bildkonstruktor in eine Anzeigemethode einschließen.

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
Warum? (Sagen Sie mir nicht, dass es sonst nicht funktioniert. Bitte erläutern Sie, warum dieser Aufruf zur Anzeige in einer Schleife erforderlich ist, aber nicht, wenn Sie nur ein Bild anzeigen.)
Kris

10
Da IPython-Notizbücher nur den letzten Rückgabewert in einer Zelle anzeigen, müssen Sie immer dann, wenn Sie zwei Ausgaben aus derselben Zelle haben, die 'display'-Methode verwenden. Weitere Informationen finden Sie in dieser Frage .
DrMcCleod

1
Du bist mein Held - ich habe zwei Tage lang danach gesucht.
ZaxR

1
Das ist toll. Wie würde ich das nächste Bild das vorhandene ersetzen lassen, wie bei einem animierten Effekt, wenn sich ein Bild im Laufe der Zeit ändert?
Blissweb

2
Ich habe mich gefragt, wie wir die Bilder kacheln können. Zum Beispiel, um eine 4x4-Gruppe von Bildern anzuzeigen.
Gmagno

31

Beachten Sie, dass bisher veröffentlichte Lösungen nur für PNG und JPG funktionieren!

Wenn Sie es noch einfacher möchten, ohne weitere Bibliotheken zu importieren, oder wenn Sie eine animierte oder nicht animierte GIF-Datei in Ihrem Ipython-Notizbuch anzeigen möchten. Verwandeln Sie die Linie, in der Sie sie anzeigen möchten, in Markdown und verwenden Sie diesen schönen kurzen Hack!

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

2
Legen Sie das Bild in den gleichen Ordner wie das Jupyter-Notizbuch oder verwenden Sie anstelle von "test.gif" "relative / path / test.gif"
Philipp Schwarz

23

Dadurch wird ein .jpgBild in Jupyter importiert und angezeigt (getestet mit Python 2.7 in einer Anaconda-Umgebung).

from IPython.display import display
from PIL import Image


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

Möglicherweise müssen Sie PIL installieren

In Anaconda erfolgt dies durch Eingabe

conda install pillow

8

Mit freundlicher Genehmigung dieser Seite fand ich, dass dies funktionierte, als die obigen Vorschläge nicht funktionierten:

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

Sie können in HTML-Code im Markdown-Abschnitt verwenden: Beispiel:

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

2

Eine sauberere Python3-Version, die Standard-Numpy, Matplotlib und PIL verwendet. Zusammenführen der Antwort zum Öffnen über die 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

Wenn Sie eine große Anzahl von Bildern effizient anzeigen möchten, empfehle ich die Verwendung des IPyPlot-Pakets

import ipyplot

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

Geben Sie hier die Bildbeschreibung ein

Es gibt einige andere nützliche Funktionen in diesem Paket, mit denen Sie Bilder auf interaktiven Registerkarten anzeigen können (separate Registerkarte für jedes Etikett / jede Klasse), was für alle ML-Klassifizierungsaufgaben sehr hilfreich ist.

Geben Sie hier die Bildbeschreibung ein


0

Bei Verwendung GenomeDiagrammit Jupyter (iPython) können Bilder am einfachsten angezeigt werden, indem das GenomeDiagramm in ein PNG-Bild konvertiert wird. Dies kann mit einem IPython.display.Image-Objekt umbrochen werden, damit es im Notizbuch angezeigt wird.

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"))

[Siehe Notizbuch]

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.