使用cpp在opencv中的xml文件中追加元素

Append element in xml file in opencv using cpp

我正在尝试在我的 opencv xml 文件中添加一个新元素,该文件已经包含一个如下元素

<?xml version="1.0"?>
<opencv_storage>
<acc type_id="opencv-ml-ann-mlp">
...
</_></weights></acc>
</opencv_storage>

我正在尝试追加一个名为 micr 的元素,如下所示

<?xml version="1.0"?>
<opencv_storage>
<acc type_id="opencv-ml-ann-mlp">
...
</_></weights></acc>
  <micr type_id="opencv-ml-ann-mlp">
...
</_></weights></micr>
</opencv_storage>

但我得到的是

<?xml version="1.0"?>
<opencv_storage>
<acc type_id="opencv-ml-ann-mlp">
...
  <micr type_id="opencv-ml-ann-mlp">
...
</_></weights></micr></_></weights></acc>
</opencv_storage>

我正在使用来自 opencv 的 cv::FileStorage。

我想知道 ::APPEND 有什么问题,是否有任何替代方法可以实现此目的。

代码如下:

cv::FileStorage f("OCR.xml", cv::FileStorage::WRITE);
...
ann.write(*f, "acc");    //In another function
...
f.release();

cv::FileStorage f("OCR.xml", cv::FileStorage::APPEND);
...
ann.write(*f, "micr");    //In another function
...
f.release();

提前致谢!

请试试这个片段。它似乎按预期工作。

#include <opencv2/opencv.hpp>
#include <vector>
using namespace cv;

int main()
{
    Mat layers = (Mat1i(2,1) << 5, 15);
    CvANN_MLP ann(layers);

    {
        FileStorage f("OCR.xml", FileStorage::WRITE);
        ann.write(*f, "acc");
    }
    {
        FileStorage f("OCR.xml", FileStorage::APPEND);
        ann.write(*f, "micr");
    }

    FileStorage f("OCR.xml", FileStorage::READ);

    CvANN_MLP ann_acc;
    ann_acc.read(*f, cvGetFileNodeByName(*f, NULL, "acc"));

    CvANN_MLP ann_micr;
    ann_acc.read(*f, cvGetFileNodeByName(*f, NULL, "micr"));

    return 0;

    return 0;
}

另请参阅 ,您不应将 save/load 与 write/read 混合使用。