Кодировать - декодировать изображение в формате base64

У меня есть изображение, полученное из объекта видеозахвата OpenCV как такового:

import cv2
import base64
from PIL import Image
import io
cap = cv2.VideoCapture(0)
# capture frame by frame
ret, frame = cap.read()

Как я могу кодировать и декодировать изображение (т.е. переходить от необработанных пикселей к байтам и обратно к необработанным пикселям)?

Пока я пробовал следующее:

encoded_string = base64.b64encode(frame)
decoded_string = base64.b64decode(encoded_string)
img = Image.open(io.BytesIO(decoded_string))
img.show()

Это дает мне ошибку:

File "/usr/lib/python3/dist-packages/PIL/Image.py", line 2295, in open
    % (filename if filename else fp))
OSError: cannot identify image file <_io.BytesIO object at 0x7efddbb78e08>

person valentin    schedule 15.03.2018    source источник


Ответы (1)


Правильный способ кодирования и последующего декодирования изображения с помощью base64 оказывается следующим:

import numpy as np
import cv2
import base64

cap = cv2.VideoCapture(0)
# capture frame by frame
ret, frame = cap.read()
# encode frame
encoded_string = base64.b64encode(frame)
# decode frame
decoded_string = base64.b64decode(encoded_string)
decoded_img = np.fromstring(decoded_string, dtype=np.uint8)
decoded_img = decoded_img.reshape(frame.shape)
# show decoded frame
cv2.imshow("decoded", decoded_img)
person valentin    schedule 16.03.2018