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

OpenCV 4.5.0 DNN加载ONNX推理报shape断言失败问题及解决

OpenCV DNN加载ONNX模型C++接口推理报错问题

问题现象

我尝试使用OpenCV DNN框架加载ONNX格式模型执行推理,在C++环境中运行如下代码时出现错误:

auto path = "path to the a RGB image...";
constexpr char TEST_DEFAULT_ONNX_FILENAME_[] = "unet_h256_w320.onnx";       
int width = 320;
int height = 256;
std::filesystem::path _model = "path to the onnx file..."
cv::Mat cpu_img = cv::imread(path);
cv::resize(cpu_img, cpu_img, cv::Size(320, 256));

cv::cvtColor(cpu_img, cpu_img, CV_BGR2RGB);
cpu_img.convertTo(cpu_img, CV_32F);
cv::Mat blob;
float scale = 1.0;
blob = cv::dnn::blobFromImage(cpu_img, scale, cv::Size(width, height), cv::Scalar(), false); 

  
int backendId = 0;
int targetId = 0;
cv::dnn::Net net = cv::dnn::readNetFromONNX(_model.string());
net.setPreferableBackend(backendId);
net.setPreferableTarget(targetId);


net.setInput(blob, "input");
net.forward(net.getUnconnectedOutLayersNames();

运行后抛出如下错误:

OpenCV(4.5.0) Error: Assertion failed (start <= (int)shape.size() && end <= (int)shape.size() && start <= end) in cv::dnn::dnn4_v20200908::total, file F:\Projects\opencv-python\opencv\modules\dnn\include\opencv2/dnn/shape_utils.hpp, line 171

该问题的异常点在于:使用几乎完全一致的处理逻辑,通过OpenCV Python接口加载同一个ONNX模型执行推理时可正常运行,无任何报错,对应Python代码如下:

opencv_net = cv2.dnn.readNetFromONNX("path to the same onnx file...")
x = np.random.randn(3,256,320).astype(np.float32)
input_blob = cv2.dnn.blobFromImage(image=x)
opencv_net.setInput(input_blob)
opencv_net.forward()

解决方案

将OpenCV版本从4.5.0升级至4.5.4及以上最新版本即可修复该问题,暂未定位到版本更新日志中具体哪项变更修复了该缺陷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 23:51:25