我正在通过base64编码的http POST接收图像。它可以是JPG或BMP。现在,我有了图像,可以将其保存在内存中。我发现了如何将其写入磁盘并将其重新读取为numpy数组(实际上我需要将其放入torch.tensor中,但numpy现在就足够了。)
这是对我有用的东西,但是效率很低:
import torch
import numpy as np
from PIL import Image
import base64
base64_decoded = base64.b64decode(test_image_base64_encoded)
with open("out.jpg", "wb") as out_file:
out_file.write(base64_decoded)
image = Image.open("out.jpg")
image_np = np.array(image)
image_torch = torch.tensor(np.array(image))
将数组写入out.jpg以便在数组之后立即重读它感觉非常无用。肯定有更好的办法。我尝试了一些以1D数组结尾的事情...而我的图像在我的情况下是2D数组(BW图像)。
nparr = np.fromstring(base64.b64decode(test_image), np.uint8)
当nparr.shape =(694463,)时将产生当image_np.shape =(2048,3072)
任何想法我怎么能代表np.array像Image.frombase64 :)吗?我知道说的话并不存在,但是如果它能够以某种方式解释“文件”而不必先将其保存到磁盘上,那就太好了。
答案 0 :(得分:3)
假设您正在使用PIL,但您不知道图像类型或尺寸:
from PIL import Image
import base64
import io
import numpy as np
import torch
base64_decoded = base64.b64decode(test_image_base64_encoded)
image = Image.open(io.BytesIO(base64_decoded))
image_np = np.array(image)
image_torch = torch.tensor(np.array(image))
我认为 io.BytesIO
是您所缺少的关键内容。