【问题标题】:How do I guard against failure of cvLoad?如何防止 cvLoad 失败?
【发布时间】:2012-08-11 04:35:36
【问题描述】:

我正在编写一个使用 OpenCV 并涉及内在参数和失真参数的程序。这些参数是从保存在光盘上的 .xml 文件加载的。我在开始声明中使用以下命令来加载文件:

CvMat *intrinsic  = (CvMat*)cvLoad("Intrinsics.xml");
CvMat *distortion = (CvMat*)cvLoad("Distortion.xml");

只要文件位于程序的工作目录中,它就可以正常工作。如果它们不是,程序会崩溃,而没有任何错误性质的迹象。我之前多次犯过没有正确定位 xml 文件的错误,我希望以后更容易排除故障。

我想创建一个防止文件加载失败的保护措施。也许如果它们不存在,我的程序可能会显示错误消息并正常退出。我看到了建议的方法here,它应该对我有用,但我想知道是否有一种更简洁的方法可以在不包含另一个标题的情况下做到这一点。

例如,OpenCV 函数 cvQueryFrame 如果不返回帧则返回 0。我用代码

frame = cvQueryFrame(capture);
if(!frame)
{
    printf("ERROR: Could not get frame from webcam.");
    exit(-1);
}

如果 cvQueryFrame 未能返回帧,则退出程序。我想用我的矩阵加载命令做类似的事情。这可能吗?如果可以,我应该怎么做?

我检查了 OpenCV 文档,但无法找到 cvLoad 在找不到指定文件时的行为描述,因此我不知道如何继续。

我正在用 C++ 编写这个项目并在 Windows 7 上运行它。

【问题讨论】:

    标签: c++ c opencv


    【解决方案1】:

    It works。来吧,自己试试吧:

    CvMat *distortion = (CvMat*)cvLoad("Distortion.xml");
    if (!distortion)
    {
        printf("!!! cvLoad failed");
        exit(-1);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 2011-02-09
      • 2020-01-16
      相关资源
      最近更新 更多