您的位置:首页 > 其它

函数:保存和读取yaml格式数据

2011-04-22 11:45 302 查看
摄像机标定需要用到的数据有:图像的大小,特征点的图像坐标,特征点的世界坐标

saveFeaturePoints函数实现功能:

特征提取后存为文档,为了兼容,最好存为.yaml或.xml格式。但是下面的函数可以存储成任意后缀名,可以“发明”自己的后缀名,用eltraEdit都可以打开。

readFeaturePoints函数可以把数据读出来,以便后面的处理。

例如

int _tmain(int argc, char** argv )
{
vector<Point2f> imagePt;
vector<Point3f> objectPt;
for(int i=0;i<10;i++)
{
imagePt.push_back(Point2f(12.345,54.321));
objectPt.push_back(Point3f(12.345,54.321,67.890));

}
saveFeaturePoints("wyx.yaml",imagePt,objectPt);

vector<Point2f> imagePt1;
vector<Point3f> objectPt1;

readFeaturePoints("wyx.yaml",imagePt1,objectPt1);
saveFeaturePoints("wyx1read.yaml",imagePt1,objectPt1);
}

void saveFeaturePoints(
const string& fileName,
// Size iSize,
vector<Point2f> imagePt,
vector<Point3f> objectPt
)
{
//Save feature points to FILE
FileStorage fs(fileName, FileStorage::WRITE );
//fs << "image_width" << iSize.width;
//fs << "image_height" << iSize.height;
fs << "image_points" << Mat(imagePt);
fs << "object_points" <<Mat(objectPt);
}
bool readFeaturePoints(
const string& fileName,
//Size &iSize,
vector<Point2f> &imagePt,
vector<Point3f> &objectPt
)
{
FileStorage fs(fileName, FileStorage::READ);
if (!fs.isOpened())
return false;

// imagePt.resize(0);
// objectPt.resize(0);

// fs["image_width"] >> iSize.width;
// fs["image_height"] >> iSize.height;
Mat imagePtMat;
fs["image_points"] >> imagePtMat;
imagePt=Mat_<Point2f>(imagePtMat);
Mat objectPtMat;
fs["object_points"] >> objectPtMat;
objectPt=Mat_<Point3f>(objectPtMat);
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: