我试图将“cv::FileStorage”中包含的内容“读取”到CvRTrees(CvStatModel实现之一)中。

“读取”功能需要CvFileStorage *和CvFileNode *(第二个参数)

看来我可以从cv::FileStorage获取CvFileStorage,但无法获取CvFileNode *。

函数(fs.getFirstTopLevelNode()。node和fs [“someName”])都返回“const CvFileNode *”而不是“CvFileNode *”,并且(另一种解决方案)我无法到达CvFileStorage *的内部。

到目前为止,我正在尝试以下解决方案:

string s = "some stuffs" // in the real code, "s" is actually exported from a rtree ("write" function)
cv::FileStorage fs(s, cv::FileStorage::READ + cv::FileStorage::MEMORY);
CvRTrees* rtree = new CvRTrees();
rtree->read(fs.fs,fs.fs->cvGetFileNodeByName("mytree"));

错误:
error C2027: use of undefined type 'CvFileStorage'

CvFileStorage的定义是:typedef struct CvFileStorage CvFileStorage;

要么
string s = "some stuffs"
cv::FileStorage fs(s, cv::FileStorage::READ + cv::FileStorage::MEMORY);
CvRTrees* rtree = new CvRTrees();
rtree->read(fs.fs,fs["mytree"].node);

错误:
error C2664: 'CvRTrees::read' : cannot convert parameter 2 from 'const CvFileNode *' to 'CvFileNode *'

两种解决方案都在编译时失败(总是由于第二个参数“read”)。

你们知道如何处理吗?

提前致谢。

cho

最佳答案

是的,这里有点笨拙,您必须使用重载*运算符才能从FileStorage访问CvFileNode:

FileStorage fs("my.yml", FileStorage::WRITE);
dtree.write(*fs,"dst");

关于c++ - 将cv::FileStorage转换为CvFileStorage,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17353344/

10-12 06:05