2016-02-13 41 views
0

我試圖從URL(由Google的Static Maps API提供)讀取圖像。從URL中讀取圖像,其中misc.imread返回平展數組而不是彩色圖像

圖像在瀏覽器中顯示正常。

​​3210

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

但是當我嘗試使用misc.imread它似乎最終成爲一個2維陣列將其加載到一個數組(即平坦化,沒有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) 

我預期什麼形狀的3-d陣列(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' 

回答

2

字節\x03\x08後,表示您的文件是索引 RGB(即它有一個調色板)。當您讀取已編制索引的PNG文件時,發生scipy.misc.imread中的錯誤。返回的數組是索引值數組,而不是實際的RGB顏色。 scipy 0.17.0的bug已經修復,但還沒有發佈。

解決方法是使用scipy.ndimage.imreadmode='RGB'選項。

(對於存在兩個略有不同imread功能,嗯,歷史原因。在這種情況下,一個事實,就是有mode選項原來是有幫助的。這些實現在SciPy的0.17.0或更新的統一。)

+0

非常感謝。你太對了! 'image = ndimage.imread(file,mode ='RGB')'返回形狀數組(278,256,3)。 – Bill

相關問題