我正在尝试在 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。
作为引用,这是 sample code file .
关于c# - 如何从 XML 文件加载 OpencvSharp.CpPlusPlus.Mat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26460971/