¿Cómo puedo mostrar una imagen de un archivo en Jupyter Notebook?

190

Me gustaría usar una computadora portátil IPython como una forma de analizar de forma interactiva algunas cartas genómicas que estoy haciendo con el GenomeDiagrammódulo de Biopython . Si bien existe una amplia documentación sobre cómo usar matplotlibpara obtener gráficos en línea en el cuaderno de IPython, GenomeDiagram usa el kit de herramientas ReportLab, que no creo que sea compatible con los gráficos en línea en IPython.

Sin embargo, estaba pensando que una forma de evitar esto sería escribir el diagrama de la trama / genoma en un archivo y luego abrir la imagen en línea que tendría el mismo resultado con algo como esto:

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

Sin embargo, no puedo entender cómo hacer esto, o saber si es posible. Entonces, ¿alguien sabe si las imágenes se pueden abrir / mostrar en IPython?

zach
fuente

Respuestas:

335

Cortesía de esta publicación , puede hacer lo siguiente:

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

( documentos oficiales )

zach
fuente
Sería mejor usar API pública sin acceder a elementos internos: from IPython.display import Imagedebería funcionar desde 0.13.
tomyun
65
esto no muestra la imagen si está dentro de un bucle
muon
66
La mayoría de la gente querría la respuesta de DrMcCleod.
AturSams
3
Esto solo funciona para mí si paso Image (filename = 'test.png') para mostrar, como se recomienda en un hilo a continuación: from IPython.core.display import Image, display<b /> display(Image(filename='test.png'))
John Strong
1
En caso de que desee que la imagen también se muestre en el modo de presentación de diapositivas (con el que se ejecuta jupyter nbconvert mynotebook.ipynb --to slides --post serve), la ruta de la imagen debería comenzar de /modo que sea una ruta absoluta desde la raíz web, es decir![alt text](/test.jpg "Some Title")
ccpizza
215

Si está intentando mostrar una imagen de esta manera dentro de un bucle, entonces necesita ajustar el constructor de imagen en un método de visualización.

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))
DrMcCleod
fuente
1
¿Por qué? (No me diga que, de lo contrario, no funciona. Explique por qué esta llamada a 'mostrar' es necesaria en un bucle, pero no si simplemente muestra una imagen).
Kris
10
Debido a que las computadoras portátiles IPython solo muestran el último valor de retorno en una celda, por lo tanto, cuando tenga dos salidas de la misma celda, deberá usar el método de 'visualización'. Vea esta pregunta para más.
DrMcCleod
1
Eres mi héroe, he estado buscando esto por dos días.
ZaxR
1
Esto es genial. ¿Cómo haría que la siguiente imagen reemplazara la existente, como un efecto animado a medida que la imagen cambia con el tiempo?
blissweb
2
Me preguntaba, ¿cómo podríamos enlosar las imágenes? Por ejemplo para mostrar un grupo 4x4 de imágenes.
gmagno
31

Tenga en cuenta que hasta ahora las soluciones publicadas solo funcionan para png y jpg.

Si lo desea aún más fácilmente sin importar más bibliotecas o si desea mostrar un archivo GIF animado o no animado en su cuaderno de Ipython. ¡Transforme la línea donde desea mostrarla para rebajar y use este bonito truco corto!

![alt text](test.gif "Title")
Philipp Schwarz
fuente
2
coloque la imagen en la misma carpeta que el cuaderno Jupyter, o en lugar de "test.gif", use "relative / path / test.gif"
Philipp Schwarz
23

Esto importará y mostrará una .jpgimagen en Jupyter (probado con Python 2.7 en el entorno Anaconda)

from IPython.display import display
from PIL import Image


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

Es posible que deba instalar PIL

en Anaconda esto se hace escribiendo

conda install pillow
Conor Cosnett
fuente
8

Cortesía de esta página, encontré que esto funcionó cuando las sugerencias anteriores no lo hicieron:

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()))
Inspiración
fuente
4

Puede usar el código html en la sección de descuento: ejemplo:

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

Una versión más limpia de Python3 que usa estándar numpy, matplotlib y PIL. Fusionando la respuesta para abrir desde 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()
Punnerud
fuente
2

Si desea mostrar de manera eficiente una gran cantidad de imágenes, le recomiendo usar el paquete IPyPlot

import ipyplot

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

ingrese la descripción de la imagen aquí

Hay algunas otras funciones útiles en ese paquete donde puede mostrar imágenes en pestañas interactivas (pestaña separada para cada etiqueta / clase) que es muy útil para todas las tareas de clasificación ML.

ingrese la descripción de la imagen aquí

Karol Żak
fuente
0

Cuando se usa GenomeDiagramcon Jupyter (iPython), la forma más fácil de mostrar imágenes es convirtiendo el GenomeDiagram en una imagen PNG. Esto se puede envolver usando un objeto IPython.display.Image para que se muestre en el cuaderno.

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

[Ver cuaderno]

Quantum7
fuente