我正在尝试将来自Web的JPEG图像资源转换为类似于scipy.misc.imread
返回的数组的NumPy数组图像表示。而不是将图像保存到磁盘,如下例所示:
import requests
from scipy import misc
def load_image(url):
res = requests.get(url)
if res == 200 and 'jpeg' in res.headers['content-type']:
with open('image.jpg', 'wb') as fp:
for chunk in res:
fp.write(chunk)
img_arr = misc.imread('image.jpg')
return img_arr
else:
return None
我想将图像直接加载到内存中。有办法吗?
答案 0 :(得分:3)
由于您提到scipy.misc.imread
,我们可以使用它隐藏Image.open
的部分。因此,实现看起来像这样 -
from scipy import misc
res = requests.get(url)
img_arr = misc.imread(BytesIO(res.content))
在性能方面,它似乎与另一篇文章中列出的四个转换阶段相当。
答案 1 :(得分:1)
我找到了一种避免写入磁盘的解决方案:
from io import BytesIO
import requests
import numpy as np
from PIL import Image
def load_image(url):
res = requests.get(url)
if res == 200 and 'jpeg' in res.headers['content-type']:
img_arr = np.array(Image.open(BytesIO(res.content)))
return img_arr
else:
return None
据我所知,我正在三种不同的陈述之间进行转换:bytes -> BytesIO -> PIL.Image -> np.array
有更高效的方法吗?