Python中使用cv2解码图像字节数组返回NoneType问题求助
问题根因
你接收端获取到的/9j/开头的字符串为Base64编码后的JPG字节文本表示,并非原始图像二进制字节流。直接将该字符串传入np.fromstring得到的是每个Base64字符对应的ASCII码值数组,和原始图像二进制数据完全不匹配,因此cv2.imdecode无法识别返回None。
解决步骤
- 第一步:对Base64字符串解码得到原始图像字节
import base64 # 输入为你收到的Base64字符串 raw_image_bytes = base64.b64decode(x['other']['contentBytes'])
- 第二步:将原始字节转换为numpy数组
import numpy as np # 优先使用frombuffer,fromstring在高版本numpy已被弃用 nparr = np.frombuffer(raw_image_bytes, np.uint8)
- 第三步:调用cv2.imdecode解码图像
import cv2 newFrame = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
异常排查方案
如果执行上述步骤后仍返回None,可按以下方法定位问题:
- 对比发送端
cv2.imencode('.jpg', imageRGB)[1].shape[0]与接收端nparr.shape[0]的数值,二者必须完全一致,若不一致说明传输过程中Base64字符串存在截断、篡改问题,需要检查传输链路逻辑 - 可将解码得到的
raw_image_bytes写入本地文件验证有效性:
with open('test_recv.jpg', 'wb') as f: f.write(raw_image_bytes)
如果本地无法正常打开该JPG文件,说明发送端的Base64编码/传输逻辑存在错误,需要从发送端排查问题。
内容的提问来源于stack exchange,提问作者Paulo Ilheu
相关产品推荐
相关产品推荐

