2016-01-16 2 views
1

Я пытаюсь добавить новый элемент в моем OpenCV XML-файл, который уже имеет один элемент, как показано нижеAppend элемент в XML-файле в OpenCV с помощью CPP

<?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> 

Я использую резюме :: 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(); 

Заранее спасибо!

+0

Пожалуйста, покажите нам код, который вы используете, т. Е. [Mcve], или невозможно узнать, где вы делаете это неправильно. – Miki

+0

Привет, Мики, я добавил код, пожалуйста, проверьте. – SuJit

ответ

1

Пожалуйста, попробуйте этот фрагмент. Кажется, он работает так, как ожидалось.

#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; 
} 

Смотрите также here, что не следует смешивать сохранения/загрузки с записи/чтения.

+0

<микр type_id = "OpenCV-мл-апп-MLP"> Это не помогает, когда я пытаюсь сделать это annAcc.load ("OCR. xml "," acc "); annMICR.load ("OCR.xml", "micr"); Это дает мне плохой аргумент ошибки, о которой вы, возможно, знаете. – SuJit

+0

См. Править – Miki

+0

Эта ошибка неправильного аргумента была из-за другой ошибки. Он также работает для .load (". Xml", ""). Что делать, если я продолжаю использовать .load вместо .read, как вы предложили? Как это повлияет? – SuJit

Смежные вопросы