2

I am writing a program that uses OpenCV and involves intrinsic and distortion parameters. These parameters are loaded from .xml files saved on disc. I use the following commands in my opening declarations to load the files:

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

This works fine as long as the files are in the program's working directory. When they are not, the program crashes without any indication of the nature of the error. I have made the mistake of not having the xml files located correctly multiple times before, and I would like to make this easier to troubleshoot in the future.

I would like to create a guard against the files failing to load. Perhaps if they are not present my program could display an error message and exit gracefully. I saw the method suggested here, and it should work for me, but I was wondering if there was a cleaner way to do it without including another header.

For example, the OpenCV function cvQueryFrame returns 0 if it does not return a frame. I use the code

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

to exit the program if cvQueryFrame fails to return a frame. I would like to do something similar with my matrix loading commands. Is this possible, and if so, how should I do it?

I checked the OpenCV documentation and could not find a description of cvLoad's behaviour when it cannot find the file specified so I am not sure how to proceed.

I am writing this project in C++ and running it on Windows 7.

Community
  • 1
  • 1

1 Answers1

0

It works. Go ahead and try it yourself:

CvMat *distortion = (CvMat*)cvLoad("Distortion.xml");
if (!distortion)
{
    printf("!!! cvLoad failed");
    exit(-1);
}
karlphillip
  • 92,053
  • 36
  • 243
  • 426