Я пытаюсь добавить новый элемент в мой XML-файл opencv, который уже имеет один элемент, как показано ниже
<?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>
Я использую cv :: FileStorage из opencv.
Я хочу знать, что не так с :: 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;
}
Смотрите также Вот что вы не должны смешивать сохранить / загрузить с записью / чтением.
Других решений пока нет …