neu*_*rte 13 xml opencv matrix
可以将旧的C风格cvMat矩阵传递给cvSave()函数,以便轻松写入XML文件.此函数不接受新的C++样式cv::Mat和cv::Mat_矩阵.
OpenCV参考有一个关于XML持久性的部分,但是这三个类(FileStorage,FileNode和FileNodeIterator)缺少任何描述或示例,我无法弄清楚如何从界面中使用它们.
谢谢.
编辑:这其实涉及很多其他的功能,在新的C++接口的OpenCV,为2.1版本.文档在某些地方非常差,函数参数不一致,并且用户组要么不知道,要么比回答问题有更好的事情要做.我将坚持使用旧的C接口一段时间.文件更好,更不用说O'Reilly的书了.
小智 15
显然它在C++风格上更容易,但正如你所说,没有任何容易获得的文档.
要cv::Mat在文件中写入,只需创建一个FileStorage变量,然后以您用于cout在屏幕上打印的样式编写矩阵.
cv::Mat someMatrix;
//you create and assign values to someMatrix however you plan to.
FileStorage fs("myFile.yml", FileStorage::WRITE);
fs << "name_to_identify_matrix_by" << someMatrix;
Run Code Online (Sandbox Code Playgroud)
阅读也类似于cin风格,但是你可以更好地看看下面的链接,以便更好地理解.在数据I/O部分的第2页,他们展示了如何使用XML/YAML的示例.
opencv C++ cheatsheet(与文档PDF中的cheatsheet不同)
以上是正确的,但是cheatsheet没有显示的是你需要打开文件.这似乎是显而易见的,但我忽略了这样做,因为备忘单没有说我必须这样做.这是允许您正确写入文件的代码
----------代码:
// write Mat objects to the freakin file
FileStorage fs("CamModel.yml", FileStorage::WRITE);
if (!fs.isOpened()){
fs.open("CamModel.yml", FileStorage::WRITE);
fs << "mtxCam" << cameraMatrix;
fs << "mtxDist" << distCoeffs;
fs.release();
}
// to test that it really worked, read the Mats back in
if (!fs.isOpened()){
fs.open("CamModel.yml", FileStorage::READ);
fs["mtxCam"] >> cameraMatrix;
fs["mtxDist"] >> distCoeffs;
fs.release();
}
Run Code Online (Sandbox Code Playgroud)
没关系,这仍然行不通.对不起浪费的帖子.