如何从XML文件加载OpencvSharp.CpPlusPlus.Mat?
问题描述:
我想在C#中做opencvsharp的立体视觉。我已经在xml文件中存储了失真矩阵。现在我想读取矩阵用于计算。我试过这个代码:如何从XML文件加载OpencvSharp.CpPlusPlus.Mat?
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:抱歉我的英文不好!
答
我通过遵循OpenCvSharp存储库中提供的示例,从XML文件中加载矩阵的值。
这是我做的:
Mat matrix;
using (CvFileStorage fs = new CvFileStorage(xmlfile, null, FileStorageMode.Read))
{
CvFileNode param = fs.GetFileNodeByName(null, nodeName);
matrix = new Mat(fs.Read<CvMat>(param));
}
哪里XMLFILE是通向你有XML/YAML文件(在你的情况:“intrinsics.yml”)和节点名称与一个字符串您的Mat存储在该文件中的节点的名称。
它值得一提的是,此函数加载的对象为与CvMat,不垫,所以这就是为什么有一个:
new Mat()
将它转换成你所需要的。如果您需要恢复更多数据,则可以使用括号在内加载更多值。
为了完整起见,这里是你如何写值到XML/YAML文件:
Mat matrix;
string nodeName = "sample_matrix";
using (CvFileStorage fs = new CvFileStorage(xmlfile, null, FileStorageMode.Write))
{
fs.Write(nodeName, matrix.ToCvMat());
fs.StartNextStream();
}
可以交换FileStorageMode.Write到FileStorageMode.Append如果你只想值添加到文件,而不是完全重写它。
为了便于参考,这是sample code file。