我基本上是在读取 OpenCV FileNode 中的几个字段,进行一些计算,然后用计算的数据仅替换原始 OpenCV FileNode 中的一个字段。
我找不到任何允许我这样做的方法。有没有人这样做过?
谢谢你的帮助!
我基本上是在读取 OpenCV FileNode 中的几个字段,进行一些计算,然后用计算的数据仅替换原始 OpenCV FileNode 中的一个字段。
我找不到任何允许我这样做的方法。有没有人这样做过?
谢谢你的帮助!
经过一番搜索,我似乎无法附加或添加到现有的文件节点或文件存储对象。
但是,您可以做的是创建一个新的 FileStorage 对象,复制您可能想要保留的任何现有 FileNode,丢弃您不想要的任何旧字段,然后将这个新的 FileStorage 对象与更新的数据一起保存。
我找不到使用最新的 C++ 接口来复制 FileNode 的方法,但是,我确实找到了使用旧的不推荐使用的结构来完成此操作的方法。下面将映射的 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);
我希望这可以帮助像我一样被困住的人。
最好的,保罗
在 OpenCV 4.0 中,有一个FileNode的成员函数
void setValue (int type, const void *value, int len=-1);
我没有尝试过,但它似乎是为此而设计的。
在 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;