如何将 numpy 数组(实际上是 BGR 图像)转换为 Base64 字符串?

Del*_*lla 6 python arrays base64 numpy image-processing

我知道如何通过读取文件将磁盘中的图像转换为 base64 。但是,在这种情况下,我的程序中已经将图像作为一个 numpy 数组,通过相机捕获,例如image[:,:,3]. 如何将其转换为 base64 字符串,以便仍然可以恢复图像?我试过这个。

from base64 import b64encode    
base64.b64encode(image)
Run Code Online (Sandbox Code Playgroud)

它确实给了我一个字符串,但是当我使用https://codebeautify.org/base64-to-image-converter进行测试时,它无法渲染图像,这意味着转换中有问题。请帮忙。

我知道一个解决方案是将图像作为 jpg 图片写入磁盘,然后将其读入 base64 字符串。但显然,当我可以避免它时,我不想要文件 i/o。

imp*_*dom 7

这是一个示例,显示您需要执行的操作:

from PIL import Image
import io
import base64
import numpy

# creare a random numpy array of RGB values, 0-255
arr = 255 * numpy.random.rand(20, 20, 3)

im = Image.fromarray(arr.astype("uint8"))
#im.show()  # uncomment to look at the image
rawBytes = io.BytesIO()
im.save(rawBytes, "PNG")
rawBytes.seek(0)  # return to the start of the file
print(base64.b64encode(rawBytes.read()))
Run Code Online (Sandbox Code Playgroud)

我可以将打印的字符串粘贴到base64 图像转换器im.show(),当网站放大图像时,它看起来类似于。

创建图像时,您可能需要操作数组或提供适当的PIL 模式