我正在尝试运行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导入并获得完全相同的错误)
答案 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
)
击>