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
关键修改说明
- 先调用
cv2.imdecode()将一维字节数组转换为三维(彩色图像)或二维(灰度图像)的有效图像矩阵 - 再对解码后的图像矩阵调用
cv2.resize(),此时操作的是标准图像数据,不会破坏编码结构,后续流程可正常执行
内容的提问来源于stack exchange,提问作者DragonSlayer666
相关产品推荐
相关产品推荐

