2016-03-15 10 views

Antwort

7

Dieser arbeitete für mich:

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

-1

Ich denke, Sie müssen eine Figur mit Unterplots machen, und jede Figur zu einem der Unterplots zuweisen. Etwas wie:

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 
10

Sie können auch HTML verwenden:

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 meinem Fall durch eine Marge Einstellung wird fix die Un-Ausrichtung (und IMHO produzieren schönere Ergebnisse).

+0

Vielleicht sollten Sie hinzufügen, wo HTML herkommt. Nach einigem googeln denke ich, dass Sie entweder auf dieses [html Modul] (https://pypi.python.org/pypi/html) oder auf [HTML.py] (http://www.decalage.info/en/python) verweisen/html). Das erste gibt mir einen Fehler, wenn ich versuche, unter python3.6 zu installieren, und das letztere ist zu exotisch für mich (d. H. Nicht auf Pipy). – Toby

+1

Ahh, und jetzt habe ich gefunden, was Sie eigentlich bezogen: 'von IPython.core.display HTML importieren – Toby

+0

@Toby Sie haben Recht, habe es nicht bemerkt. Fest. – AkiRoss

1

Dies ist eine Verbesserung der Antwort von AkiRoss. Dies bietet mehr Flexibilität bei der Anzeige und vermeidet das Wiederholen der Funktion für jede Zeile durch Anzeige in einem Rasterformat.

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

Parameter:

  • list_of_images - eine Liste, die alle Bilder, die Sie anzeigen möchten.
  • list_of_titles - eine Liste mit allen Titeln des Bildes in der gleichen Reihenfolge.
  • no_of_columns - Anzahl der Spalten im Raster.
  • figsize - die Größe jeder Reihe, um Quetschen zu verhindern. (horizontal_size, vertical_size).

Beispiel:

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

Originalbilder:

Verwandte Themen