2012-04-29 26 views
14

Chcę otworzyć dwa pliki obrazów png i wyświetlić je obok siebie dla porównania wizualnego. Mam ten kod do otwierania jednego pliku PNG (który dostałem od unutbu na stackoverflow.com):wyświetlanie dwóch obrazów PNG jednocześnie za pomocą pylab

import numpy as np 
import pylab 
import matplotlib.cm as cm 
import Image 

fname='file.png' 
image=Image.open(fname).convert("L") 
arr=np.asarray(image) 
pylab.imshow(arr,cmap=cm.Greys_r) 
pylab.title('title') 
pylab.show() 

czy istnieje sposób zmodyfikować ten kod, aby otworzyć i boczne pliki wyświetlacz 2 png siebie z własnej tytuły?

Odpowiedz

22

następujące prace dla mnie (można skomentować/odkomentuj linii w kodzie, aby zmienić układ "kompozytowych" obrazu):

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

import numpy as np 
import pylab 
import matplotlib.cm as cm 
import Image 

f = pylab.figure() 
for n, fname in enumerate(('1.png', '2.png')): 
    image=Image.open(fname).convert("L") 
    arr=np.asarray(image) 
    f.add_subplot(2, 1, n) # this line outputs images on top of each other 
    # f.add_subplot(1, 2, n) # this line outputs images side-by-side 
    pylab.imshow(arr,cmap=cm.Greys_r) 
pylab.title('Double image') 
pylab.show() 

EDIT screenshot:

enter image description here

+0

to jest doskonała! dzięki! – balibakbar

+0

Czy nie spowoduje to błędu "indeks poza zakresem", jeśli dodasz więcej niż dwa obrazy? – Seanny123

+3

Dla najnowszego 'matplotlib', lepiej użyj indeksu zaczynającego się od 1. Zobacz dokument [ofical doc] (http://matplotlib.org/api/api_changes.html#changes-in-1-4-x) – wlnirvana

0

Oto przykład, który zawiera dwie podgrafy na jednej figurze.

import pylab 

coordinates = range(5) 
x = [1,4,5,6,2] 
y = [4,6,8,9,2] 

fig = pylab.figure() 

fig_1 = fig.add_subplot(2,1,1) 

fig_1.bar(coordinates,x) 

fig_2 = fig.add_subplot(2,1,2) 

fig_2.bar(coordinates,y) 

pylab.show() 

Myślę, że wystarczy połączyć to z tym, co już masz.

0

Połączenie powyższych odpowiedzi do jakiegoś kodu, który teraz używać:

`

import pylab as P 
import numpy as N 
import Image 

fnames = ['1.png', '2.png', '3.png'] 

fig = P.figure() 
for i,fname in enumerate(fnames): 
    fig.add_subplot(number_images, 1, i+1) 
    P.imshow(N.asarray(Image.open(fname).convert("L"))) 
P.show() 

`

Powiązane problemy