You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cv2.imdecode解析Flask Multipart返回图片返回None问题求助

问题根因

你遇到的cv2.imdecode返回None的问题是两个错误共同导致的:

  1. Flask返回的不是JPEG格式字节:你直接对OpenCV解码后的原始像素numpy数组调用了tobytes(),得到的是原始BGR像素的二进制流,不是JPEG压缩格式的字节。cv2.imdecode仅支持解析JPEG/PNG等压缩格式的编码字节,无法解析原始像素流。
  2. 客户端调用参数错误:你已经把图片字节转成了numpy uint8数组np_img,但调用cv2.imdecode时传的还是原始bytes类型的img,不符合函数的入参要求。

修复方案

Flask端修改

将原始像素数组编码为JPEG格式后再返回:

# 替换掉 img = matched_data['image'].tobytes()
# 编码为JPEG格式,95为画质参数,可根据需求调整0-100
ret, jpeg_buf = cv2.imencode('.jpg', matched_data['image'], [cv2.IMWRITE_JPEG_QUALITY, 95])
if not ret:
    # 编码失败的异常处理逻辑
    return Response("图片编码失败", status=500)
img = jpeg_buf.tobytes()

客户端修改

修正cv2.imdecode的入参:

# 替换掉 new_img = cv2.imdecode(img, cv2.IMREAD_UNCHANGED)
new_img = cv2.imdecode(np_img, cv2.IMREAD_UNCHANGED)

可选校验

如果修复后仍有问题,可以加简单的JPEG格式校验:正常JPEG字节以\xff\xd8开头,以\xff\xd9结尾,你可以打印img[:2]和img[-2:]确认编码是否正确。


内容的提问来源于stack exchange,提问作者baudneo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:36:04