Read a base 64 encoded image from memory using OpenCv python library

Solution 1:

This is my solution for python 3.7 and without using PIL

import base64

def readb64(uri):
   encoded_data = uri.split(',')[1]
   nparr = np.fromstring(base64.b64decode(encoded_data), np.uint8)
   img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
   return img

i hope that this solutions works for all

Solution 2:

This worked for me on python 2, and doesn't require PIL/pillow or any other dependencies (except cv2): Edit: for python3 use base64.b64decode(encoded_data) to decode instead.

import cv2
import numpy as np

def data_uri_to_cv2_img(uri):
    encoded_data = uri.split(',')[1]
    nparr = np.fromstring(encoded_data.decode('base64'), np.uint8)
    img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
    return img

data_uri = "data:image/jpeg;base64,/9j/4AAQ..."
img = data_uri_to_cv2_img(data_uri)
cv2.imshow(img)