繁体   English   中英

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

[英]How to load an OpencvSharp.CpPlusPlus.Mat from a XML file?

我正在尝试在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:对不起,我的英语不好!

通过遵循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”),而nodeName是一个字符串,其中包含您的Mat存储在文件中的节点的名称。

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

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。

作为参考,这是示例代码文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM