scipy.misc.imread返回的对象没有大小/形状
我有一个问题,跟这个问题有点像,但不完全一样。我的目标是用scipy.misc.imread
来读取一个TIFF格式的图片,然后使用这个函数返回的灰度值数组。当我处理一张尺寸为1280x960像素的图片时,一切正常,我得到了我想要的结果。然而,当我尝试对一张更大的图片(6272x897像素)进行同样的操作时,imread
返回了一个这样的对象:
<PIL.TiffImagePlugin.TiffImageFile image mode=LA size=6272x897 at 0x3906B48>
我想从这个对象中提取数据,比如用.getdata()
,但是这个对象似乎没有任何形状或大小,就像我之前提到的问题一样。Ben随后提出了以下解决方案:
pip uninstall PIL
brew install libjpeg
pip install PIL
不过,我正在处理的是TIFF文件,而不是JPEG格式(libtiff
似乎已经安装)。而且,读取一张较小的图片没有问题,但读取一张大图片时却突然出现了问题。有没有人知道这是怎么回事?
1 个回答
1
Scipy在调用np.array
的时候,如果没有找到__array__
这个东西,就会创建一个对象数组。你应该直接使用原始的PIL库,从那里读取信息。网上有很多关于如何把PIL对象转换成Numpy数组的问题。
之所以在处理小的数组时能正常工作,可能是因为数组太大了,导致PIL在内存使用上变得小心,但我不太确定。
一个可能有效的替代方案是使用Pillow(PIL的一个分支),或者可以看看matplotlib。