cv2 imdecode не возвращает ни одного со строкой base64 - PullRequest
0 голосов
/ 26 ноября 2018

Когда я пытаюсь преобразовать строку base64 в изображение, я не получаю ничего в CV2.Ниже приведен мой код

import cv2
import numpy as np

def bsae62toimage(imgvalue):
    imge = "R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7"

    nparr = np.fromstring(imge,np.uint8)
    print(nparr.shape)
    img1 = cv2.imdecode(nparr,cv2.IMREAD_UNCHANGED)
    print(img1.shape)

Он печатает массив numpy, но cv2.imdecode возвращает None.Можете ли вы помочь мне найти проблему в моем коде?

Мои выводы: np.fromstring возвращает массив 1D.Я предполагаю, что это должно вернуть 3D массив.Но я могу ошибаться.

1 Ответ

0 голосов
/ 26 ноября 2018

Поскольку неясно, откуда вы получили переменную imge = "R0lGODlhEA...".Я хотел бы представить идеальный поток для преобразования изображения OpenCV в строку base64 и преобразования его обратно в OpenCV img как:

import cv2
import base64
import numpy as np


def to_base64(img):
    _, buf = cv2.imencode(".png", img)

    return base64.b64encode(buf)


def from_base64(buf):
    buf_decode = base64.b64decode(buf)

    buf_arr = np.fromstring(buf_decode, dtype=np.uint8)

    return cv2.imdecode(buf_arr, cv2.IMREAD_UNCHANGED)


img = cv2.imread("/path/to/img.png")
img_base64 = to_base64(img)
img_decoded = from_base64(img_base64)

print img_decoded.shape

Также документация гласит:

Если буфер слишком короткий или содержит недопустимые данные, возвращается пустая матрица / изображение.

Мне кажется, что imge = "R0lGODlhEA..." недопустимо.

...