在OS X 10.7上使用scipy颜色和imsave(Lion)

时间:2012-03-06 16:56:37

标签: python numpy osx-lion scipy

我正在尝试运行imsave和imshow以及在OS X 10.7上处理数组中颜色的基本scipy功能无济于事。这是我的代码,然后我会发布我的错误。有没有办法解决或永久性地解决这个问题,所以我可以在我的Mac上使用这个功能?我在运行Ubuntu的Linux机器上运行这个相同的代码,并取得了成功。

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行,in     imsave( 'foo.png',一) NameError:名称'imsave'未定义“

和imshow的类似错误。

有关如何避免此错误的任何想法?

(在旁注中,我尝试从scipy.misc导入并获得完全相同的错误)

2 个答案:

答案 0 :(得分:1)

从SciPy手册:

  

请注意,Python Imaging Library(PIL)不是SciPy的依赖项,因此pilutil模块在没有安装PIL的系统上不可用。

您需要为OSX安装PIL。我不确定它是否可用。

答案 1 :(得分:0)

编辑:

我误解了你的问题。我认为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的情况下,你使用numpy版本覆盖了许多python的内置函数,而不是做同样的事情。)另外,不要使用基础scipy命名空间。只有numpy只有一个或两个额外的功能。 所有的scipy都在其子模块中。直接导入您需要的内容(例如from scipy.misc import imsave