OpenCV imshow报size.width>0断言失败错误 栅格图转VGG16输入数组问题
报错原因及修复方案
触发imshow报错的直接原因
你在读取用于展示的原图时,给cv2.imread传入了字符串字面量"reg001_path",而非你之前定义的存储实际路径的变量,OpenCV找不到对应文件返回了None,传入imshow后触发了尺寸校验失败的断言错误。
直接修复方案:将对应行代码修改为:
orig = cv2.imread(reg001_path)
其他影响VGG16推理的逻辑错误
你的代码还存在两处会导致模型推理结果异常的问题:
- numpy数组的
resize方法是原地操作,无返回值,你写的image = channel_reg001.resize((224, 224, 3))会让image变量为空,且单通道栅格数据直接拉伸为3通道不符合VGG16的输入要求,你需要先将单通道数据复制3次拼接为伪RGB格式,再调整尺寸:# 单通道转3通道,再resize到224*224 channel_reg001 = cv2.resize(channel_reg001, (224,224)) channel_reg001 = np.stack([channel_reg001]*3, axis=-1) image = np.expand_dims(channel_reg001, axis=0) - 如果你用的是GDAL读取的多波段影像,注意GDAL读取的波段顺序和OpenCV默认的BGR顺序不同,需自行调整为RGB顺序再做预处理。
内容的提问来源于stack exchange,提问作者melololo
相关产品推荐
相关产品推荐

