Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除OpenCV文件存储对象中的文件节点_Opencv - Fatal编程技术网

如何删除OpenCV文件存储对象中的文件节点

如何删除OpenCV文件存储对象中的文件节点,opencv,Opencv,我基本上读取OpenCV文件节点中的几个字段,进行一些计算,然后用计算数据替换原始OpenCV文件节点中的一个字段 我找不到任何允许我这样做的方法。以前有人这样做过吗 谢谢你的帮助 经过一些搜索后,似乎无法追加或添加到现有的filenode或filestorage对象 cv::FileStorage fileStructure; fileStructure.open("yourfile.xml", cv::FileStorage::WRITE); CvFileStorage* fsPtr= f

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

我找不到任何允许我这样做的方法。以前有人这样做过吗


谢谢你的帮助

经过一些搜索后,似乎无法追加或添加到现有的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);
但是,您可以做的是创建一个新的FileStorage对象,复制您可能想要保留的任何现有FileNode,放弃您不想要的任何旧字段,然后用更新的数据保存这个新的FileStorage对象

我找不到一种方法来使用最新的C++接口来复制文件,但是,我确实找到了一种使用旧的废弃结构来实现这一点的方法。下面将映射的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);
我希望这能帮助像我一样陷入困境的人

最好的,
Paul

经过一些搜索后,似乎无法追加或添加到现有的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);
但是,您可以做的是创建一个新的FileStorage对象,复制您可能想要保留的任何现有FileNode,放弃您不想要的任何旧字段,然后用更新的数据保存这个新的FileStorage对象

我找不到一种方法来使用最新的C++接口来复制文件,但是,我确实找到了一种使用旧的废弃结构来实现这一点的方法。下面将映射的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);
我希望这能帮助像我一样陷入困境的人

最好的,
Paul在OpenCV 4.0中,有一个成员函数


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

在OpenCV 4.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;

在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;