使用misc.imread从URL读取图像返回平面数组而不是彩色图像

时间:2016-02-13 05:44:05

标签: python scipy imread ndimage cstringio

我试图从网址上读取图片(由Google的静态地图API提供)。

图像在浏览器中显示正常。

enter image description here

https://maps.googleapis.com/maps/api/staticmap?maptype=satellite&center=37.530101,38.600062&zoom=14&size=256x278&key= ...

但是当我尝试使用misc.imread将其加载到数组中时,它似乎最终成为一个二维数组(即扁平化,没有RGB颜色)。

以下是我正在使用的代码(我隐藏了我的API密钥):

from scipy import ndimage
from scipy import misc
import urllib2
import cStringIO

url = \
    "https://maps.googleapis.com/maps/api/staticmap?maptype=satellite&" \
    "center=37.530101,38.600062&" \
    "zoom=14&" \
    "size=256x278&" \
    "key=...."

file = cStringIO.StringIO(urllib2.urlopen(url).read())
image = misc.imread(file)
print image.shape

(278, 256)

我所期待的是三维形状阵列(278,256,3)。

也许它没有正确读取文件?

In [29]:
file.read()[:30]
Out[29]:
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\x00\x00\x00\x01\x16\x08\x03\x00\x00\x00\xbe'

1 个答案:

答案 0 :(得分:2)

Bundle bundle = new Bundle(); bundle.putParcelableArrayList("mylist", learning); intent.putExtras(bundle); 之后的字节\x03表示您的文件是索引 RGB(即它有一个调色板)。当您读取索引的PNG文件时,\x08中存在一个错误。返回的数组是索引值数组,而不是实际的RGB颜色。该错误已修复为scipy 0.17.0,但尚未发布。

解决方法是将scipy.misc.imreadscipy.ndimage.imread选项一起使用。

(两个略有不同的mode='RGB'函数存在,嗯,历史原因。在这种情况下,一个人拥有imread选项的事实证明是有用的。这些实现在scipy 0.17.0中统一。)