opencv Mat 를 이용한 데이터 저장 (FileStorage) 사용.

Mat 를 이용한 데이터 저장 (FileStorage) 사용.


Reference

[Good Example] http://docs.opencv.org/modules/core/doc/xml_yaml_persistence.html

http://www710.univ-lyon1.fr/~eguillou/documentation/opencv2/classcv_1_1_file_storage.html

http://d.hatena.ne.jp/takmin/20100108/1262938079

https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/cpp/filestorage.cpp?rev=4032

http://opencv.jp/opencv2-x-samples/xml_yaml

http://hi.baidu.com/ktscrdjuhcgltuf/item/333cf09009c4334bf0421510



openCV 에 데이터를 저장하고 읽는 방법에 대해 xml 형태로 저장을 하고 읽어주는 함수가 있다. 


(소스코드 하이라이팅은 스킨을 변경함으로써 적용이 되지 않으니, 일단 이렇게 처리함.)


파일을 저장할 때

cv::FileStorage fs1("tests.xml",cv::FileStorage::WRITE);

fs1<<"m"<< 5;

time_t rawtime;

time(&rawtime);

fs1 << "date" << asctime(localtime(&rawtime));

cout << "time  = " << asctime(localtime(&rawtime)) << endl;

fs1.release();



그리고 생성된 tests.xml 의 파일 내용

<?xml version="1.0"?>

<opencv_storage>

<m>5</m>

<date>"Sun Oct 21 22:58:14 2012&#x0a;"</date>

</opencv_storage>



파일을 읽을 때 

파일을 Read 할 때에는 Mat형과 일반 변수와 조금 다르게 작동한다. ( 위에 Reference 를 찾아보도록 하자. 필요한 것만 정리)


calibration_data.yml 

%YAML:1.0

camera_matrix: !!opencv-matrix

   rows: 3

   cols: 3

   dt: d

   data: [ 5.4878060101587482e+002, 0., 3.2379097753399617e+002, 0.,

       5.5120367155250619e+002, 2.4679280040648706e+002, 0., 0., 1. ]

distortion_coefficients: !!opencv-matrix

   rows: 5

   cols: 1

   dt: d

   data: [ 7.4565943360480599e-002, -4.8930545854922253e-001,

       -3.0599995688070737e-004, 6.9437524158480729e-004,

       8.1491055152417369e-001 ]

imageSize: [ 640, 480 ]


Read Sources 

FileStorage fs2("calibration_data.yml", FileStorage::READ );

Mat parameterK;

fs2["camera_matrix"] >> parameterK;

cout << parameterK << endl;

fs2.release();


의외로 간단하다. 

댓글

Designed by JB FACTORY