Linux cv2 imdecode返回带base64字符串的none

Linux cv2 imdecode返回带base64字符串的none,linux,python-3.x,opencv,base64,cv2,Linux,Python 3.x,Opencv,Base64,Cv2,当我尝试将base64字符串转换为图像时,我在CV2中没有得到任何结果。 下面是我的代码 import cv2 import numpy as np def bsae62toimage(imgvalue): imge = "R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

当我尝试将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数组。但是我可能错了。

因为不清楚您从哪里获得了
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…”
是无效的。

因为不清楚您从哪里获得了
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…”
是无效的。

我从JAVA获得这个字符串。我试图将用Tensorflow编写的模型集成到JAVA应用程序中。JAVA应用程序将图像发送到base64 Strings中我认为您应该仔细阅读JAVA方法文档,并在同一图像上比较Python和JAVA的结果,以查看对于较小的图像(例如10x10),base64编码的数据在两侧是否一致。如果可能的话,还可以共享base64转换的Java代码。我正在做的是-我使用selenium呈现一个网页,并使用以下代码截图-String imagecontent=null;如果(screenshotenabled){imagecontent=driver.getScreenshotAs(OutputType.BASE64);}也在您给出的代码中,我对_BASE64(filepath)做了一个小小的更改-def:open(filepath,“rb”)作为imageFile:bstr=BASE64.b64encode(imageFile.read())当我运行带有此更改的脚本时返回bstr,它给了我错误的大小:(21841280,4)。我试图将用Tensorflow编写的模型集成到JAVA应用程序中。JAVA应用程序将图像发送到base64 Strings中我认为您应该仔细阅读JAVA方法文档,并在同一图像上比较Python和JAVA的结果,以查看对于较小的图像(例如10x10),base64编码的数据在两侧是否一致。如果可能的话,还可以共享base64转换的Java代码。我正在做的是-我使用selenium呈现一个网页,并使用以下代码截图-String imagecontent=null;如果(screenshotenabled){imagecontent=driver.getScreenshotAs(OutputType.BASE64);}也在您给出的代码中,我对_BASE64(filepath)做了一个小小的更改-def:open(filepath,“rb”)作为imageFile:bstr=BASE64.b64encode(imageFile.read())return bstr当我运行带有此更改的脚本时,它给了我错误的大小:(21841280,4)。亲爱的投票人-留下有价值的评论投票人-留下有价值的评论