α2α2 usar type sheet notebook inside como cheat and ipython ipython-notebook

ipython - usar - type markdown and latex α2α2



¿Desea mostrar varias imágenes en una celda de IPython Notebook? (8)

Si tengo varias imágenes (cargadas como matrices NumPy), ¿cómo puedo mostrarlas en una celda de IPython Notebook?

Sé que puedo usar plt.imshow(ima) para mostrar una imagen ... pero quiero mostrar más de una a la vez.

Yo he tratado:

for ima in images: display(Image(ima))

Pero acabo de obtener un enlace de imagen roto:


Diseño horizontal

Respuesta corta

plt.figure(figsize=(20,10)) columns = 5 for i, image in enumerate(images): plt.subplot(len(images) / columns + 1, columns, i + 1) plt.imshow(image)

Respuesta larga

import glob import matplotlib.pyplot as plt import matplotlib.image as mpimg %matplotlib inline images = [] for img_path in glob.glob(''images/*.jpg''): images.append(mpimg.imread(img_path)) plt.figure(figsize=(20,10)) columns = 5 for i, image in enumerate(images): plt.subplot(len(images) / columns + 1, columns, i + 1) plt.imshow(image)


Basado en la respuesta de @ChaosPredictor.

from matplotlib.pyplot import figure, imshow, axis from matplotlib.image import imread def showImagesMatrix(list_of_files, col=10, wSize=5, hSize=5, mypath=''.''): fig = figure(figsize=(wSize, hSize)) number_of_files = len(list_of_files) row = number_of_files / col if (number_of_files % col != 0): row += 1 for i in range(number_of_files): a=fig.add_subplot(row, col, i + 1) image = imread(mypath + ''/'' + list_of_files[i]) imshow(image, cmap=''Greys_r'') axis(''off'')

entonces

from pathlib import Path p = Path(''.'') num_images = 30 list_of_image_paths = [str(x) for x in list(p.glob(''../input/train/images/*''))[:num_images]] showImagesMatrix(list_of_image_paths) # or with named args showImagesMatrix(list_of_image_paths, wSize=20, hSize=10, col=5)


De alguna manera relacionada con esta pregunta (y como me dirigieron a esta respuesta cuando intentaba resolverla), pude resolver un problema similar simplemente escribiendo la ruta completa del archivo cuando llamé a Image() . En mi caso, tuve que elegir una imagen aleatoria de diferentes rutas de carpetas almacenadas en una lista de su your_folder y mostrarlas.

import random, os for i in range(len(your_folder)): ra1 = "../"+your_folder[i]+"/"+random.choice(os.listdir(your_folder[i])) image = Image(ra1) display(image)


Esto es más fácil y funciona:

from IPython.display import Image from IPython.display import display x = Image(filename=''1.png'') y = Image(filename=''2.png'') display(x, y)


Puede mostrar múltiples imágenes en una celda de IPython Notebook usando las funciones de visualización y HTML. Debe crear el conjunto de etiquetas img html como una cadena de la siguiente manera

from IPython.display import Image, HTML, display from glob import glob imagesList=''''.join( ["<img style=''width: 120px; margin: 0px; float: left; border: 1px solid black;'' src=''%s'' />" % str(s) for s in sorted(glob(''yourimage*.png'')) ]) display(HTML(imagesList))

Vea un ejemplo de uso en http://nbviewer.ipython.org/github/PBrockmann/Dodecahedron

Es posible que deba actualizar su navegador (Mayús + carga) para ver nuevas imágenes si se han cambiado desde una celda anterior.


Respuesta corta:

llame a plt.figure() para crear nuevas figuras si desea más de una en una celda:

for ima in images: plt.figure() plt.imshow(ima)

Pero para aclarar la confusión con la Image :

IPython.display.Image es para mostrar archivos de imagen, no datos de matriz. Si desea mostrar matrices numpy con Image, primero debe convertirlas a un formato de archivo (más fácil con PIL):

from io import BytesIO import PIL from IPython.display import display, Image def display_img_array(ima): im = PIL.Image.fromarray(ima) bio = BytesIO() im.save(bio, format=''png'') display(Image(bio.getvalue(), format=''png'')) for ima in images: display_img_array(ima)

Un notebook ilustra ambos enfoques.


Si no te importa una dependencia adicional, aquí hay dos liners que usan scikit-image :

from skimage.util import montage plt.imshow(montage(np.array(images), multichannel=True))

Establezca multichannel=True para imágenes en color y multichannel=False para imágenes en escala de grises.


from matplotlib.pyplot import figure, imshow, axis from matplotlib.image import imread mypath=''.'' hSize = 5 wSize = 5 col = 4 def showImagesMatrix(list_of_files, col=10): fig = figure( figsize=(wSize, hSize)) number_of_files = len(list_of_files) row = number_of_files/col if (number_of_files%col != 0): row += 1 for i in range(number_of_files): a=fig.add_subplot(row,col,i+1) image = imread(mypath+''/''+list_of_files[i]) imshow(image,cmap=''Greys_r'') axis(''off'') showImagesMatrix(listOfImages,col)

basado en la respuesta de @Michael