我正在解析一个RGB .jpg文件,它在linux中解析得很好,但在mac osx中却没有。两者都是版本2.7.9
以下是代码:
import numpy
import Image
from StringIO import StringIO
import urllib
def main():
# process terrain input
terrain_image = numpy.asarray(Image.open(StringIO(urllib.urlopen("http://i.imgur.com/IIv3E1K.jpg").read())))
# swap around axes and drop two of the three layers (they're all identical)
terrain_image = numpy.swapaxes(terrain_image, 2, 1)
terrain_image = numpy.swapaxes(terrain_image, 0, 1)
terrain_image = terrain_image[0]
print "Terrain Image Parsed!"
if __name__ == "__main__":
main()
在Linux中,我得到了这个:
Terrain Image Parsed!
在osx中:
Traceback (most recent call last):
File "test.py", line 19, in <module>
main()
File "test.py", line 14, in main
terrain_image = terrain_image[0]
IndexError: too many indices for array
为什么会出现这种差异?
答案 0 :(得分:0)
这可能是一个糟糕的猜测 - 首先要做的是将调用“Image.open(...)”放在一个单独的行中,然后打印,调试或以其他方式内省生成的对象 看看你是否真的有一个Image。对数组对象执行相同的操作。
如果你得到了一个合适的图像(以及数组是否看起来很奇怪),我猜测它们的开始 - 当前现代形式的打开图像,正在使用from PIL import Image
- 作为Pillow,维护的叉子Python-imaging -library不赞成使用简单的import Image
。
import Image
行中的错误为no表明您使用的是过时的Python-Imaging-Library。我建议从您的项目中卸载“PIL”(或Python-PIL) - 如果您(正如您所愿)使用Python包隔离机制(例如virtualenv)并安装直接替换“枕头”。 (当然,将所述行更改为from PIL import Image
)
如果您使用的是系统库,请检查您的Linux发行版是否有Pillow包(而不是PIL)并安装它。否则,您将不得不采用virtualenv或类似机制,您可以在不干扰系统剩余的情况下提供枕头。 (删除包管理器提供的Pillow在任何Linux发行版中用于系统范围的枕头 - 通过PIP安装的Python端 - 可能是灾难性的,因为系统将删除所有依赖于PIL的包,因为它不会“看到”它)
再次,这可能不是错误原因。