linux - cv2 imdecode不返回任何base64字符串

标签 linux python-3.x opencv base64 cv2

当我尝试将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它返回一维数组。我认为它应该返回3D数组。但是我可能是错的。

最佳答案

由于不清楚从哪里获得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指出:

If the buffer is too short or contains invalid data, the empty matrix/image is returned.



在我看来imge = "R0lGODlhEA..."是无效的。

关于linux - cv2 imdecode不返回任何base64字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53475135/

相关文章:

algorithm - 二进制搜索程序没有按预期工作。出了什么问题?

python - 如何获取是/否问题的某些动词的否定词列表?

python - 无法在 PyCharm 中导入 cv2

java - opencv如何在java中绘制minAreaRect

linux - 带有 CMake 的 Qt 应用程序中的静态链接库

android - Android Studio 安装报错

c++ - 使用 OpenCV、Boost 线程和多个摄像头

java - "unlimited"系统下打开文件过多异常

python - Keras 中的 "Could not interpret optimizer identifier"错误

OpenCV 版本问题