2012-03-06 4 views
2

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

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.

Любые идеи о том, как избежать этой ошибки?

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

ответ

0

Edit:

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

scipy.misc.imsave всего лишь тонкая обертка вокруг PIL (the python imaging library). Вам нужно установить 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 с одной или двумя дополнительными функциями. Все из scipy находится в его подмодулях. Импорт, что вам нужно непосредственно (например, from scipy.misc import imsave)

+0

Я просто попробовал запустить то, что у вас там, и сразу же получил ошибку, сообщив, что не было модуля с именем Image. Это встроено в python? или откуда это происходит? – KevinShaffer

+0

Это [библиотека изображений python] (http://www.pythonware.com/products/pil/). Это странно ... У вас должно быть это, иначе иначе 'scipy.misc.imsave' не будет доступен ... (или, во всяком случае, это вызовет ошибку.'imsave' - это всего лишь тонкая оболочка вокруг' Image'.) –

+0

Вместо этого вам нужно сделать из 'PIL import Image'. Попробуйте и посмотрите, работает ли это ... –

1

Из инструкции SciPy:

Note that the Python Imaging Library (PIL) is not a dependency of SciPy and therefore the pilutil module is not available on systems that don’t have PIL installed.

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

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