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

首次在VS2019用C++的OpenCV DNN加载Darknet模型时遇std::bad_alloc异常

解决OpenCV DNN加载Darknet模型时的std::bad_alloc异常

可能的原因及解决方案

1. 模型文件路径错误

readNetFromDarknet找不到指定的.cfg或.weights文件时,可能会触发内存分配异常(而非明确的文件不存在错误)。

  • 确认yolov4-tiny.cfg和yolov4-tiny.weights文件路径正确:
    • 直接使用绝对路径,比如:
      cv::dnn::Net net = cv::dnn::readNetFromDarknet("D:/models/yolov4-tiny.cfg", "D:/models/yolov4-tiny.weights");
      
    • 若用相对路径,必须将文件放在项目的输出目录下(比如Debug/Release文件夹),而非源码目录。

2. OpenCV与模型版本不兼容

不同版本的OpenCV对Darknet模型的支持有差异,yolov4-tiny这类模型对OpenCV版本有要求:

  • 升级OpenCV到4.5.x及以上版本,该版本对yolov4系列模型支持更完善。
  • 确保下载的模型是官方标准版本,不要使用修改过的非兼容格式。

3. 编译平台或内存问题

  • 若当前用32位编译环境,立即切换到64位平台编译:32位程序最大仅能使用约2GB内存,加载模型时极易触发内存分配失败。
  • 关闭系统中占用大量内存的程序,释放足够内存后重新运行项目。

4. OpenCV编译配置问题

  • 确认你的OpenCV版本包含DNN模块:预编译版本默认带DNN,若自定义编译需手动勾选DNN选项。
  • 保证项目的运行时库(Debug用MDd,Release用MD)与OpenCV编译时的运行时库完全一致。

调试建议

在加载模型前添加文件存在性检查,提前排查路径问题:

#include <fstream>
// ...
std::ifstream cfgFile("yolov4-tiny.cfg");
std::ifstream weightsFile("yolov4-tiny.weights");
if (!cfgFile.is_open()) {
    std::cerr << "cfg文件不存在或无法打开" << std::endl;
    return -1;
}
if (!weightsFile.is_open()) {
    std::cerr << "weights文件不存在或无法打开" << std::endl;
    return -1;
}
cfgFile.close();
weightsFile.close();

cv::dnn::Net net = cv::dnn::readNetFromDarknet("yolov4-tiny.cfg", "yolov4-tiny.weights");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:22:11