簡體   English   中英

將Base64編碼的圖像轉換為numpy數組

[英]Convert Base64 encoded image to a numpy array

我正在通過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)

當image_np.shape =(2048,3072)時,nparr.shape =(694463,)時會產生

任何想法我怎么能代表像Image.frombase64 :)的np.array嗎? 我知道它不存在,但是如果它能夠以某種方式解釋“文件”而不必先將其保存到磁盤,那將是很棒的。

假設您使用的是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是您缺少的關鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM