![](/img/trans.png)
[英]How to pass multiple cv::Mat from c++ dll to opencvsharp Mat c# properly?
[英]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.