2011年7月15日金曜日

cv::MatのXMLファイルへの入出力

Matの内容をXML形式でファイルに出力 or ファイルから入力する方法のメモ.

2種類のMatを出力するプログラム
#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
 Mat matA = (cv::Mat_<double>(3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1);
 Mat matB = cv::Mat::ones(5, 5, CV_8U)*3;

 FileStorage cvfs("D:/test.xml", CV_STORAGE_WRITE);
 write(cvfs,"matA", matA);
 write(cvfs,"matB", matB);
}

出力されたxmlファイルの中身.
<?xml version="1.0"?>
<opencv_storage>
<matA type_id="opencv-matrix">
  <rows>3</rows>
  <cols>3</cols>
  <dt>d</dt>
  <data>
    1. 0. 0. 0. 1. 0. 0. 0. 1.</data></matA>
<matB type_id="opencv-matrix">
  <rows>5</rows>
  <cols>5</cols>
  <dt>u</dt>
  <data>
    3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3</data></matB>
</opencv_storage>

読み込む方のプログラム
int main()
{
    Mat ma, mb;

    FileStorage cvfs("D:/test.xml", CV_STORAGE_READ);
    FileNode node(cvfs.fs, NULL);
    read(node["matB"], mb);
    read(node["matA"], ma);
    std::cout << ma << std::endl;
    std::cout << mb << std::endl;
}

0 件のコメント:

コメントを投稿