opencv2.2的FileStorage的<<操作符问题

opencv2.2的FileStorage的>>操作符居然不支持数字形式的字符串做key!!

FileStorage fs("test.yml", FileStorage::WRITE);

fs<<"node"<<""{"<<"10"<<"}";

居然不行,运行时错误!

抛出异常:

OpenCV Error: Unspecified error (Incorrect element name 10) in unknown function, file d:/TDDOWNLOAD/OpenCV-2.2.0/modules/core/src/persistence.cpp, line 5043 d:/TDDOWNLOAD/OpenCV-2.2.0modules/core/src/persistence.cpp:5043:  error: (-2) Incorrect element name 10

但是改为:

fs<<"node"<<""{"<<"t10"<<"}";

就可以,真是无语了,

使用了一个for循环往文件中写参数;

 for (int i=0; i<vec.size(); ++i)
 {
  sprintf_s(ttnode, 10, "%d",i);
  fs<<string(ttnode)<<"["<<vec[i].id1<<vec[i].idm1<<vec[i].id2<<vec[i].idm2<<"]";
 }

调了一下午一直以为是const的原因,(opencv的源码中<<需要的参数是const char*或者const string)逼得我甚至写了一个const string cstr[256]={"0"...."255"};来解决,结果还是出问题;

定义一个const std::string nn[2]={"name","nnoi"};

结果就行!!!我愤怒了!!!

后来又找了一个官方网站上的imagelist_creator.cpp的例子看最后是这样:fs << string(av[i]);

纳闷了!为什么呢!

在分析发现我的ttnode中是"数值"格式,而定义的那个nn[2]却不是,而且imagelist_creator.cpp的av[i]肯定也不是数值形式的字符串。

 

终于找到问题了,原来是不支持纯数字式的字符串作为key,不知道是yaml格式的原因还是opencv的原因,知道问题那就好办了,改一下就行了!

 for (int i=0; i<vec.size(); ++i)
 {
  sprintf_s(ttnode, 10, "t%d",i);
  fs<<string(ttnode)<<"["<<vec[i].id1<<vec[i].idm1<<vec[i].id2<<vec[i].idm2<<"]";
 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值