2016-02-29 4 views
3

Я хотел бы создать матричный подзаговор и отобразить каждый BMP-файл из каталога в другом подзаголовке, но я не могу найти подходящее решение для своей проблемы, может кто-нибудь мне помочь ?.Задать несколько файлов изображений в подзаголовках matplotlib

Это код, который у меня есть:

import os, sys 
from PIL import Image 
import matplotlib.pyplot as plt 
from glob import glob 

bmps = glob('*trace*.bmp') 

fig, axes = plt.subplots(3, 3) 

for arch in bmps: 
    i = Image.open(arch) 
    iar = np.array(i) 
    for i in range(3): 
     for j in range(3): 
      axes[i, j].plot(iar) 
      plt.subplots_adjust(wspace=0, hspace=0) 
plt.show() 

Я имею следующее сообщение об ошибке после выполнения:

enter image description here

ответ

7

изначально Matplotlib поддерживает только PNG изображений см http://matplotlib.org/users/image_tutorial.html

затем путь всегда Прочитать изображение - застроить изображение

считывание изображение

img1 = mpimg.imread('stinkbug1.png') 
img2 = mpimg.imread('stinkbug2.png') 

участок изображением (2 подзаговоров)

plt.figure(1) 
plt.subplot(211) 
plt.imshow(img1) 

plt.subplot(212) 
plt.imshow(img2) 
plt.show() 

следовать учебнику по http://matplotlib.org/users/image_tutorial.html (из импортных библиотек)

здесь является нить на графике bmps с matplotlib: Why bmp image displayed as wrong color with plt.imshow of matplotlib on IPython-notebook?

+0

Ralf, спасибо за Ваш ответ. Если я понял ваш ответ, мне нужно изменить формат с BMP на PNG, а затем снова запустить мой код? Вы не упомянули о моем коде, если у меня PNG вместо BMP, вы думаете, что мой код будет запущен? Еще раз спасибо. – hammu

+0

для первой попытки я бы сохранил это проще, как в http://matplotlib.org/1.3.1/users/pyplot_tutorial.html#pyplot-tutorial и выше. если он работает, вы можете добавить более сложные функции. –

0

Bmp имеет три цветовых канала, а также высоту и ширину, придавая ему форму (h, w, 3). Я считаю, что построение изображения дает вам ошибку, потому что сюжет принимает только два измерения. Вы можете получить серого изображения, которое создаст матрицу из двух измерений (h, w).

Не зная размеров изображений, вы могли бы сделать что-то вроде этого:

for idx, arch in enumerate(bmps): 
    i = idx % 3 # Get subplot row 
    j = idx // 3 # Get subplot column 
    image = Image.open(arch) 
    iar_shp = np.array(image).shape # Get h,w dimensions 
    image = image.convert('L') # convert to grayscale 
    # Load grayscale matrix, reshape to dimensions of color bmp 
    iar = np.array(image.getdata()).reshape(iar_shp[0], iar_shp[1]) 
    axes[i, j].plot(iar) 
plt.subplots_adjust(wspace=0, hspace=0) 
plt.show() 
+0

Брайан. Если я запустил его с вашими предложениями, кажется, что процесс переходит в бесконечный цикл (ошибка памяти) – hammu

+0

Я думаю, что была проблема с двумя вашими вложенными циклами. См. Пересмотренный фрагмент кода выше. –

+0

Здравствуйте, Брайан, после нескольких испытаний я не могу получить результат, который хотел бы иметь, я меняю файлы формата на JPG, и теперь мой список «bmps» содержит файлы моего JPG после запуска вашего предложения. Я получаю следующее message: IndexError: индекс 2 выходит за рамки для оси 0 с размером 2 – hammu

Смежные вопросы