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

Colab中使用cv2.resize处理摄像头图像触发imdecode_断言失败错误求助

解决Google Colab中cv2.resize()导致imdecode_断言失败错误

问题场景

在Google Colab环境下,使用tensorflow==2.4.1、tensorflow-gpu==2.4.1、opencv-python、matplotlib库调用摄像头采集照片,尝试用cv2.resize()调整图像尺寸时触发以下错误:

OpenCV(4.6.0) /io/opencv/modules/imgcodecs/src/loadsave.cpp:818: error: (-215:Assertion failed) buf.checkVector(1, CV_8U) > 0 in function 'imdecode_'

注释掉cv2.resize()相关代码后,程序可正常运行。

错误原因

问题出在js_to_image函数的处理顺序错误:

  • jpg_as_np是从Base64解码得到的一维字节数组,本质是JPEG格式的原始编码数据,还未转换为图像矩阵
  • 直接对这个一维数组调用cv2.resize()会彻底破坏JPEG的编码结构,导致后续cv2.imdecode()无法识别有效图像数据,触发断言失败

修复方案

调整处理顺序,先解码得到图像矩阵,再执行resize操作。修改后的js_to_image函数如下:

# function to convert the JavaScript object into an OpenCV image
def js_to_image(js_reply):
    """
    Params:
            js_reply: JavaScript object containing image from webcam
    Returns:
            img: OpenCV BGR image
    """
    
    # decode base64 image
    image_bytes = b64decode(js_reply.split(',')[1])
    # convert bytes to numpy array
    jpg_as_np = np.frombuffer(image_bytes, dtype=np.uint8)
    # 先解码得到OpenCV图像矩阵
    img = cv2.imdecode(jpg_as_np, flags=1)
    # 再对图像矩阵执行resize操作
    img = cv2.resize(img, (250, 250)) 
    
    return img

关键修改说明

  1. 先调用cv2.imdecode()将一维字节数组转换为三维(彩色图像)或二维(灰度图像)的有效图像矩阵
  2. 再对解码后的图像矩阵调用cv2.resize(),此时操作的是标准图像数据,不会破坏编码结构,后续流程可正常执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:55:31