How to display images in a string with IPython mapping?

If I run the following command:

for file in files: display(Image(filename=os.path.join(folder,file))) 

I get a list of images in a column:

enter image description here

How to put them in a row (horizontally)?

+6
source share
4 answers

This worked for me:

 from matplotlib.pyplot import figure, imshow, axis from matplotlib.image import imread def showImagesHorizontally(list_of_files): fig = figure() number_of_files = len(list_of_files) for i in range(number_of_files): a=fig.add_subplot(1,number_of_files,i+1) image = imread(list_of_files[i]) imshow(image,cmap='Greys_r') axis('off') 

enter image description here

+7
source

You can also use HTML:

 from IPython.display import display, HTML def make_html(folder, image): return '<img src="{}" style="display:inline;margin:1px"/>' .format(os.path.join(folder, image)) display(HTML(''.join(make_html(f, x)) for x in files)) 

In my case, setting a margin will fix the inconsistency (and IMHO will get more pleasant results).

+10
source

This is an improvement in AkiRoss's answer. This gives you more flexibility in how you show and avoid repeating a function for each row, displaying it in a grid format.

 import matplotlib.pyplot as plt def grid_display(list_of_images, list_of_titles=[], no_of_columns=2, figsize=(10,10)): fig = plt.figure(figsize=figsize) column = 0 for i in range(len(list_of_images)): column += 1 # check for end of column and create a new figure if column == no_of_columns+1: fig = plt.figure(figsize=figsize) column = 1 fig.add_subplot(1, no_of_columns, column) plt.imshow(list_of_images[i]) plt.axis('off') if len(list_of_titles) >= len(list_of_images): plt.title(list_of_titles[i]) 

Options:

  • list_of_images - a list containing all the images you want to display.
  • list_of_titles - a list containing all the image headers in the same order.
  • no_of_columns - the number of columns in the grid.
  • figsize - the size of each line to prevent crushing. (horizontal_size, vertical_size) .

Example:

 import cv2 import matplotlib.pyplot as plt img = cv2.imread("files/tiger_monkey.jpg") grey_img = cv2.imread("files/tiger_monkey_grey.png") img_b, img_g, img_r = cv2.split(img) grey_img_b, grey_img_g, grey_img_r = cv2.split(grey_img) combi_one = cv2.merge((img_b, grey_img_g, img_r)) combi_two = cv2.merge((grey_img_b, grey_img_g, img_r)) combi_three = cv2.merge((img_b, img_g, grey_img_r)) combi_four = cv2.merge((grey_img_b, img_g, img_r)) combi_five = cv2.merge((grey_img_b, img_g, grey_img_r)) combi_six = cv2.merge((img_b, grey_img_g, grey_img_r)) titles = ["combi_one", "combi_two", "combi_three", "combi_four", "combi_five", "combi_six"] images = [combi_one, combi_two, combi_three, combi_four, combi_five, combi_six] images = [cv2.cvtColor(image, cv2.COLOR_BGR2RGB) for image in images] grid_display(images, titles, 3, (10,10)) 

Original Images:

+1
source

I think you will have to make a figure with subtitles and assign each figure to one of the subplots. Sort of:

 import matplotlib.pyplot as plt f,ax = plt.subplots(1,5) for i in range(5): ax[i].imshow(yourimage) plt.show() # or display.display(plt.gcf()) if you prefer 
-one
source

All Articles