代码之家  ›  专栏  ›  技术社区  ›  backtrack

cv2 imdecode返回无base64字符串

  •  -1
  • backtrack  · 技术社区  · 6 年前

    当我试图将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 回复  |  直到 6 年前
        1
  •  0
  •   ZdaR    6 年前

    因为不清楚你从哪里得到的 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
    

    还有 documentation 声明:

    如果缓冲区太短或包含无效数据,则为空 返回矩阵/图像。

    在我看来 imge=“r0lgodlhea…” 无效。