1. 程式人生 > >【OpenCV】OpenCv讀取xml/yml相關問題

【OpenCV】OpenCv讀取xml/yml相關問題

As an example, if you have a yml file like this one, that I'll call demo.yml

%YAML:1.0
    Variable1: !!opencv-matrix
       rows: 4
       cols: 5
       dt: f
       data: [ -1.60522782e-03, -5.93489595e-03, 2.92204670e-03,
           1.14785777e-02, -1.57432575e-02, -2.17529312e-02, 4.05947529e-02,
           6.56594411e-02, 1.24527821e-02, 3.19751091e-02, 5.41692637e-02,
           4.04683389e-02, 2.59191263e-03, 1.15112308e-03, 1.11024221e-02,
           4.03668173e-03, -3.19138430e-02, -9.40114353e-03, 4.93452176e-02,
           5.73473945e-02 ]
    Variable2: !!opencv-matrix
       rows: 7
       cols: 2
       dt: f
       data: [ -2.17529312e-02, 4.05947529e-02, 5.73473945e-02,
           6.56594411e-02, 1.24527821e-02, 3.19751091e-02, 5.41692637e-02,
           4.03668173e-03, -3.19138430e-02, -9.40114353e-03, 4.93452176e-02,
           4.04683389e-02, 2.59191263e-03, 1.15112308e-03 ]

Then, you can use OpenCV FileStorage class to load the variables contained on this demo.yml file as:
#include <iostream>
#include <string>

#include <cv.h>
#include <highgui.h>

using namespace cv;
using namespace std;

int main (int argc, char * const argv[])
{   
    Mat var1;
    Mat var2;

    string demoFile  = "demo.yml";

    FileStorage fsDemo( demoFile, FileStorage::READ);
    fsDemo["Variable1"] >> var1;
    fsDemo["Variable2"] >> var2;

    cout << "Print the contents of var1:" << endl;
    cout << var1 << endl << endl;

    cout << "Print the contents of var2:" << endl;
    cout << var2 << endl;

    fsDemo.release();
    return 0;
}