如何从XML文件加载OpencvSharp.CpPlusPlus.Mat?

时间:2014-10-20 08:03:44

标签: c# xml opencv opencvsharp

我试图用C#做opencvsharp的立体视觉。我已经将失真矩阵存储在xml文件中。现在我想读取用于计算的矩阵。我试过这段代码:

FileStorage fs = new FileStorage();
fs.Open("intrinsics.yml",FileStorageMode.FormatYaml);
Mat M1, M2, D1, D2;
fs["M1"] >> M1;
fs["D1"] >> D1;
fs["M2"] >> M2;
fs["D2"] >> D2;

但它不起作用。有人可以帮助我吗?提前致谢。 P / S:抱歉我的英语不好!

1 个答案:

答案 0 :(得分:1)

我按照OpenCvSharp存储库中提供的示例从XML文件加载了矩阵的值。

我就这样做了:

proxy(static_cast<int(*)(int)>(foo), 5);

其中xmlfile是您拥有的XML / YAML文件的路径(在您的情况下:&#34; intrinsics.yml&#34;),而nodeName是一个字符串,其中包含Mat存储在其中的节点的名称文件。

值得一提的是,这个函数将对象加载为CvMat,而不是Mat,这就是为什么有一个:

Mat matrix;

using (CvFileStorage fs = new CvFileStorage(xmlfile, null, FileStorageMode.Read))
{
    CvFileNode param = fs.GetFileNodeByName(null, nodeName);
    matrix = new Mat(fs.Read<CvMat>(param));
}

将其转换为您需要的。如果需要恢复更多数据,可以使用括号在中加载更多值。

为了完整起见,以下是将值写入XML / YAML文件的方法:

new Mat()

如果您只想将值添加到文件中而不是完全重写它,可以将FileStorageMode.Write交换到FileStorageMode.Append。

为了参考起见,这是sample code file