如何在numpy中打开jpg?

时间:2016-03-28 03:54:50

标签: image url numpy urllib2

我想从url加载jpg图像作为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()

当我运行此代码时,我收到错误:

TypeError: Image data can not convert to float

2 个答案:

答案 0 :(得分:1)

一种方法是使用PIL加载JPG图像

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')

或使用plt.imreadformat=直接使用numpy格式的图像。

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')

答案 1 :(得分:0)

urllib用于html文件。对于图像,您需要imread工具。

原生plt.imread仅打开PNG个文件。

对于JPG文件,您可以将PIL或Pillow用于python 3,这是一个图像处理模块。仅关注io imageio是一种现代易于安装的替代方案:

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