2016-03-15 8 views

Odpowiedz

7

Ten pracował dla mnie:

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

Myślę, że będziesz musiał wykonać figurkę z podziałem i przypisać każdą figurę do jednego z wątków. Coś jak:

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

Można również użyć 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)) 

W moim przypadku, przez ustawienie marginesu będzie naprawić nie-wyrównanie (i IMHO dają lepsze wyniki).

+0

Może powinieneś dodać skąd pochodzi HTML. Po przejściu przez google'a myślę, że odnosisz się do tego [modułu HTML] (https://pypi.python.org/pypi/html) lub do [HTML.py] (http://www.decalage.info/en/python/html). Pierwszy daje mi błąd podczas próby instalacji pod python3.6, a ten drugi jest dla mnie zbyt egzotyczny (tj. Nie na pipy). – Toby

+1

Ahh, a teraz znalazłem to, co faktycznie miałeś na myśli: 'od IPython.core.display import HTML' – Toby

+0

@Dobrze, że masz rację, tego nie zauważyłeś. Naprawiony. – AkiRoss

1

To jest poprawa odpowiedzi AkiRoss. Daje to większą elastyczność w sposobie wyświetlania i pozwala uniknąć powtarzania funkcji dla każdego wiersza poprzez wyświetlanie w formacie siatki.

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

Parametry:

  • list_of_images - wykaz zawierający wszystkie obrazy, które chcesz wyświetlić.
  • list_of_titles - lista zawierająca wszystkie tytuły obrazu w tej samej kolejności.
  • no_of_columns - liczba kolumn w siatce.
  • figsize - wielkość każdego rzędu, aby zapobiec zmiażdżeniu. (horizontal_size, vertical_size).

przykład:

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

Oryginalne obrazy: