Использование scipy цветов и imsave на OS X 10.7 (Lion) - PullRequest
2 голосов
/ 06 марта 2012

Я пытаюсь запустить imsave и imshow и основные функции scipy, работающие с цветами в массивах в OS X 10.7, но безрезультатно. Вот мой код, и после этого я опубликую свою ошибку. Есть ли способ исправить или обойти это на постоянной основе, чтобы я мог использовать эту функцию на моем Mac? Я запустил этот идентичный код на Linux-машине с Ubuntu и добился успеха.

from numpy import *
from scipy import *

a = zeros((3,500,400))

a[1,0:100,0:200] = 255


imsave('foo.png',a)

Если это работает правильно, я должен просто получить черный ящик 500x400 пикселей и зеленый прямоугольник внутри этих 100x200 пикселей в верхнем левом углу. но вместо этого я получаю эту ошибку

"Traceback (последний вызов был последним): Файл "colorstuff.py", строка 10, в imsave ( 'foo.png', а) NameError: имя 'imsave' не определено "

и аналогичная ошибка для imshow.

Есть идеи, как избежать этой ошибки?

(на sidenote, я попытался импортировать из scipy.misc и получить те же ошибки)

Ответы [ 2 ]

1 голос
/ 22 ноября 2012

Из руководства SciPy:

Обратите внимание, что Python Imaging Library (PIL) не является зависимостью от SciPy, и поэтому модуль pilutil недоступен в системах, в которых не установлен PIL.

Вам необходимо установить PIL для OSX. Я не уверен, что это доступно.

0 голосов
/ 06 марта 2012

Редактировать:

Я неправильно понял ваш вопрос. Я думал, что imsave не сохранял ваше изображение должным образом, но вы смогли импортировать его.

scipy.misc.imsave - это просто тонкая оболочка вокруг PIL (библиотека изображений Python) . Вам нужно установить PIL для его работы.

Что произойдет, если вы просто используете PIL напрямую?

scipy.misc.imsave датируется много лет назад, когда Image не поддерживал массивы numpy. Официально это не рекомендуется, но оно проходит через множество обручей, которые не нужны в последних версиях PIL.

Что произойдет, если вы сделаете это:

import numpy as np
import Image

# It's easier to work with a MxNx3 array instead of a 3xMxN array in PIL
a = np.zeros((500, 400, 3))
a[:100, :200, 1] = 255

im = Image.fromarray(a.astype(np.uint8))
im.save('test.png')

Кроме того, избегайте делать from whatever import *. Это только для интерактивного использования. В противном случае это очень плохая идея. (В случае numpy, вы переопределяете многие встроенные функции python с numpy-версиями, но не делаете то же самое.) Кроме того, не используйте базовое пространство имен scipy. Это просто numpy с одной или двумя дополнительными функциями. Все Сципиона находятся в его подмодулях. Импортируйте то, что вам нужно напрямую (например, from scipy.misc import imsave)

...