我按照 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。
作为参考,这是示例代码文件。