2016-03-28 9 views
2

Ich möchte ein JPG-Bild von einer URL als ein numpy Array laden. Aber wenn ich das tue, bekomme ich einen Fehler. Kann mir jemand sagen, was ich tun kann, damit mein Code funktioniert?Wie öffne ein jpg in numpy?

import urllib2 
import matplotlib.pyplot as plt 
import numpy as np 
f=urllib2.urlopen("https://www.ibiblio.org/hyperwar/USA/USA-EF-Defeat/maps/USA-EF-Defeat-40.jpg") 
print(f.shape) 
plt.imshow(f) 
plt.show() 

Wenn ich diesen Code ausführen, erhalte ich die Fehlermeldung:

TypeError: Image data can not convert to float 

Antwort

1

Eine Möglichkeit ist PIL zu verwenden JPG-Bild

import urllib2 
import cStringIO 
from PIL import Image 
import matplotlib.pyplot as plt 

%matplotlib inline 


url='https://www.ibiblio.org/hyperwar/USA/USA-EF-Defeat/maps/USA-EF-Defeat-40.jpg' 
im = Image.open(cStringIO.StringIO(urllib2.urlopen(url).read())) 
plt.imshow(im, cmap='Greys_r') 

oder verwenden plt.imread mit format= zu laden zu haben Bild im numply Format direkt.

im = plt.imread(urllib2.urlopen(url), format='jpeg') 
# or using `io.BytesIO` 
# im = plt.imread(io.BytesIO(urllib2.urlopen(url).read()), format='jpeg') 
plt.imshow(im, cmap='Greys_r') 
0

urllib ist für HTML-Datei. Für Bilder benötigen Sie ein imread Werkzeug.

Nativ plt.imread nur PNG Dateien öffnen.

Für die JPG Datei können Sie PIL oder Pillow für Python 3 verwenden, das ein Bildverarbeitungsmodul ist. Für nur io Sorge, imageio ist eine moderne einfach zu installierende Alternative:

im = imageio.imread('https://www.ibiblio.org/hyperwar/ 
USA/USA-EF-Defeat/maps/USA-EF-Defeat-40.jpg')