/*写一个配置文件*/
CvFileStorage *fs = cvOpenFileStorage(".//config.xml",NULL,CV_STORAGE_WRITE);
float matrix_data[9] = {1,0,0,0,1,0,0,0,1};
CvMat cmatrix = cvMat( 3, 3, CV_32F, matrix_data );
cvWriteInt( fs, "frame_count", 10 );
cvStartWriteStruct( fs, "frame_size", CV_NODE_SEQ );
cvWriteInt( fs, 0, 320 );
cvWriteInt( fs, 0, 200 );
cvEndWriteStruct(fs);
cvSave( "E://config.xml", &cmatrix );
cvReleaseFileStorage(&fs);
/*读一个配置文件*/
CvFileStorage *fs = cvOpenFileStorage("D://config.xml",NULL,CV_STORAGE_READ);
cvReadIntByName(fs,NULL,"frame_count",0);
CvSeq *s = cvGetFileNodeByName(fs,0,"frame_size")->data.seq;
int frame_width = cvReadInt((CvFileNode*)cvGetSeqElem(s,0),0);
int frame_height = cvReadInt((CvFileNode*)cvGetSeqElem(s,1),0);
cvReleaseFileStorage(&fs);
上面的代码的文件节点为序列的,没有名字,使用起来可能不方便,
可以使用map形式的文件节点,下面是实例的代码及其效果。
<?xml version="1.0"?>
<opencv_storage>
<High_calibration>
<first_levle_calibration>320</first_levle_calibration>
<second_levle_calibration>200</second_levle_calibration></High_calibration>
</opencv_storage>
CvFileStorage *fs = NULL;
fs = cvOpenFileStorage(".//config.xml",NULL,CV_STORAGE_WRITE);
cvStartWriteStruct( fs, "High_calibration", CV_NODE_MAP );
cvWriteInt( fs, "first_levle_calibration", 320 );
cvWriteInt( fs, "second_levle_calibration", 200 );
cvEndWriteStruct(fs);
cvReleaseFileStorage(&fs);
CvFileStorage *fs1 = NULL;
fs1 = cvOpenFileStorage(".//config.xml",NULL, CV_STORAGE_READ);
CvFileNode *fn = cvGetFileNodeByName(fs1,NULL,"High_calibration");
int i_first_level = cvReadIntByName(fs1,fn,"first_levle_calibration",0);
int i_secont_level = cvReadIntByName(fs1,fn,"second_levle_calibration",0);
cvReleaseFileStorage(&fs1);
另外,对于同一个配置文件,重新创建一个CvFileStorage之后,再重新读写后,原来的文件中的内容将会消失,建议在不同的文件,块中写入同一个配置文件时,最好建立一个全局的CvFileStorage变量。