使用 misc.imread 从 URL 读取图像返回扁平化数组而不是彩色图像
Reading image from URL with misc.imread returning a flattened array instead of a colour image
我正在尝试从 URL 中读取图像(由 Google 的静态地图 API 提供)。
图像在浏览器中显示正常。
但是当我尝试使用 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) 的 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'
\x08
之后的字节 \x03
表示您的文件是 indexed RGB(即它有一个调色板)。 scipy.misc.imread
中存在读取索引 PNG 文件时发生的错误。返回的数组是索引值数组,而不是实际的 RGB 颜色。该错误已在 scipy 0.17.0 中修复,但尚未发布。
解决方法是使用 scipy.ndimage.imread
和选项 mode='RGB'
。
(出于,嗯,历史原因,存在两个略有不同的 imread
函数。在这种情况下,具有 mode
选项的事实变成了很有帮助。实现在 scipy 0.17.0 中统一。)
我正在尝试从 URL 中读取图像(由 Google 的静态地图 API 提供)。
图像在浏览器中显示正常。
但是当我尝试使用 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) 的 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'
\x08
之后的字节 \x03
表示您的文件是 indexed RGB(即它有一个调色板)。 scipy.misc.imread
中存在读取索引 PNG 文件时发生的错误。返回的数组是索引值数组,而不是实际的 RGB 颜色。该错误已在 scipy 0.17.0 中修复,但尚未发布。
解决方法是使用 scipy.ndimage.imread
和选项 mode='RGB'
。
(出于,嗯,历史原因,存在两个略有不同的 imread
函数。在这种情况下,具有 mode
选项的事实变成了很有帮助。实现在 scipy 0.17.0 中统一。)