cv2 imdecode returns none 与 base64 字符串
cv2 imdecode returns none with base64 string
当我尝试将 base64 字符串转换为图像时,我在 CV2 中得到 none。
以下是我的代码
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
正在 returning None
。你能帮我找出我代码中的问题吗?
我的发现: np.fromstring 它 return 一维数组。我假设它应该是 return 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..."
是无效的。
当我尝试将 base64 字符串转换为图像时,我在 CV2 中得到 none。 以下是我的代码
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
正在 returning None
。你能帮我找出我代码中的问题吗?
我的发现: np.fromstring 它 return 一维数组。我假设它应该是 return 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..."
是无效的。