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

标签 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:对不起我的英语不好!

最佳答案

我按照 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/

相关文章:

c# - 如何调整表格单元格的大小以适合内容

c# - 自定义自动调整大小的WPF面板类

c# - 在 Crystal 报表中水平重复对象?

android - 如何在不使用 id 的情况下操作按钮的内容;安卓?

Python:去除图像中水平黑线的快速方法

python - 给定 OpenCV/Python 中 'S' 形状边缘的轮廓,可以使用什么方法沿着形状的中心追踪曲线?

c# - Razor 中 foreach 中的 html 和代码的混合

java - Jsoup 匹配任何具有命名空间的元素

C# 从 StringBuilder 解析 Xml

python - 覆盖 PIL 中的图像而不是打开新窗口