调用cv2.resize处理.npy数组时报!dsize.empty()断言错误如何解决
报错原因
cv2.resize仅支持输入2维灰度图数组(格式为(H,W)) 或 3维带通道的彩色图数组(格式为(H,W,C)),你加载得到的npy数组shape为(1,1,192,640),属于4维数组,前两个是长度为1的冗余batch维度,OpenCV无法识别输入数组的有效图像高宽信息,因此触发了resize函数的!dsize.empty()断言报错。
解决方案
步骤如下:
- 第一步:删除数组里长度为1的冗余维度
可以直接用numpy的squeeze方法去除所有冗余维度,得到2维的图像数组:
img = np.load('data.npy') # 执行squeeze后数组shape变为 (192, 640) img_squeezed = np.squeeze(img)
如果后续需要保留单通道属性,也可以手动转换为3维单通道格式:
# 转换后shape为 (192, 640, 1),符合OpenCV单通道图像的格式要求 img_3ch = img_squeezed[..., np.newaxis]
- 第二步:执行resize操作
将处理后的2维/3维数组传入cv2.resize即可:
res = cv2.resize(img_squeezed, (352, 1216))
补充说明:cv2.resize的dsize参数顺序为
(宽度, 高度),和numpy数组默认的(高度, 宽度)顺序相反,当前你传入的(352, 1216)参数,最终得到的缩放后数组shape为(1216, 352),符合常规使用逻辑,不需要调整参数顺序。
内容的提问来源于stack exchange,提问作者Hans
相关产品推荐
相关产品推荐

