如何从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