如何删除OpenCV FileStorage对象中的FileNode

时间:2013-08-21 16:07:18

标签: opencv

我基本上读取OpenCV FileNode中的几个字段,进行一些计算,然后用原始OpenCV FileNode中的一个字段替换计算数据。

我无法找到允许我这样做的任何方法。有人曾经这样做过吗?

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

经过一些搜索后,我似乎无法追加或添加到现有的filenode或filestorage对象。

但是,您可以做的是创建一个新的FileStorage对象,复制您可能想要保留的任何现有FileNode,丢弃您不想要的任何旧字段,然后使用更新的数据保存这个新的FileStorage对象。

我找不到使用最新C ++接口来复制FileNodes的方法,但是,我确实找到了一种方法来使用旧的弃用结构来实现这一点。以下内容将映射的FileNode复制到新的FileStorage对象。

cv::FileStorage fileStructure;
fileStructure.open("yourfile.xml", cv::FileStorage::WRITE);

CvFileStorage* fsPtr= fileStructure.operator *(); //gets the underlying pointer

cvWriteFileNode(fsPtr, "CopiedNode", fileNodeObject.operator *(),0);

我希望这可以帮助那些像我一样陷入困境的人。

最佳, 保罗

答案 1 :(得分:0)

在OpenCV 4.0中,有一个FileNode成员函数

void setValue (int type, const void *value, int len=-1);

我没有尝试过,但这似乎是为此设计的。

答案 2 :(得分:0)

似乎没有正式的方法可以执行此OpenCV 4.x之前的版本。一种解决方法是使用基础基本元素:

//type int with value of 5
cv::FileNode node;
CvFileNode* rawNode = *node;
//now the new value is 6
rawNode->data.i = 6;