2012-04-29 5 views
14

Я хочу открыть два файла изображений png и отобразить их рядом друг с другом для визуального сравнения. У меня есть этот код для открытия одного файла в формате PNG (который я получил от unutbu на stackoverflow.com):одновременно отображает два изображения png с помощью 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() 

Есть ли способ изменить этот код, чтобы открыть и дисплей 2 PNG файлы бок о бок со своими собственными названия?

ответ

22

Следующие работы для меня (вы можете комментировать/раскомментировать строки в коде, чтобы изменить расположение «составного» изображения):

#!/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: Скриншот:

enter image description here

+0

это отлично! благодаря! – balibakbar

+0

Не приведет ли к ошибке «индекс вне диапазона», если вы добавите более двух изображений? – Seanny123

+3

Для последнего «matplotlib» вам лучше использовать индекс, начинающийся с 1. См. [Официальный документ] (http://matplotlib.org/api/api_changes.html#changes-in-1-4-x) – wlnirvana

0

Вот пример, который включает в себя два подграфа на одном рисунке.

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

Я думаю, вам просто нужно объединить это с тем, что у вас уже есть.

0

Объединяя ответы выше, в какой-то код, который я теперь использовать:

`

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

`