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

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

只要文件位于程序的工作目录中,此方法就可以正常工作。否则,程序将崩溃,而没有任何迹象表明错误的性质。我犯了一个错误,那就是之前没有多次正确放置xml文件,我希望以后可以更轻松地进行故障排除。

我想创建防止文件加载失败的保护措施。也许如果他们不存在,我的程序可能会显示错误消息并正常退出。我看到了建议使用here的方法,该方法应该对我有用,但是我想知道是否有一种更干净的方法来执行此操作而不包含另一个 header 。

例如,如果OpenCV函数cvQueryFrame不返回帧,则返回0。我使用代码
frame = cvQueryFrame(capture);
if(!frame)
{
    printf("ERROR: Could not get frame from webcam.");
    exit(-1);
}

如果cvQueryFrame无法返回帧,则退出程序。我想对矩阵加载命令执行类似的操作。这可能吗?如果可以,我应该怎么做?

我检查了OpenCV文档,当cvLoad找不到指定的文件时,找不到cvLoad行为的描述,因此我不确定如何继续。

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

最佳答案

It works。继续尝试一下:

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

关于c++ - 如何防止cvLoad失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11907613/

10-09 00:19