Opencv中cvOpenFileStorage,cvWriteInt,cvStartWrit,cvGetFileNodeByName等函数的用法

 /*写一个配置文件*/

 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变量。

 

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值