我正在尝试将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
我想将图像直接加载到内存中。有没有办法做到这一点?
发布于 2017-05-19 06:32:09
既然你提到了scipy.misc.imread
,我们就可以用它来隐藏Image.open
的一部分。因此,实现将如下所示-
from scipy import misc
res = requests.get(url)
img_arr = misc.imread(BytesIO(res.content))
性能方面,它似乎可以与另一篇文章中列出的四个转换阶段相媲美。
发布于 2017-05-19 04:34:22
我找到了一个绕过写入磁盘的解决方案:
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
有没有更好的方法呢?
https://stackoverflow.com/questions/44057140
复制相似问题