使用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 混合使用。
我正在尝试在我的 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;
}
另请参阅