如何使用openCV保存关键点矢量

Seb*_*Seb 8 c file-io opencv

我想知道是否可以使用CvFileStorage类或cv :: FileStorage类来保存cv :: KeyPoints的向量.读回来也是同样的过程吗?

谢谢.

jma*_*tel 7

我不确定你真正期望的是什么:我提供的代码只是一个例子,展示了文件存储在OpenCV C++绑定中的工作原理.它假定您在XML文件中单独写入所有关键点,其名称是它们在存储的向量中的位置.

它假设当你读回它们时,你知道它们想要读取它们的数量,如果没有,代码会更复杂一些.你会找到一种方法(例如,如果你阅读文件存储并测试它给你的东西,如果它没有给你什么,那么这意味着没有更多的要点阅读) - 这只是一个想法,你必须找到解决方案,也许这段代码就足够了.我应该确切地说,我使用ostringstream将整数放入字符串中,并通过改变它将在*.yml文件中写入的位置.

//TO WRITE
vector<Keypoint> myKpVec;
FileStorage fs(filename,FileStorage::WRITE);

ostringstream oss;
for(size_t i;i<myKpVec.size();++i) {
    oss << i;
    fs << oss.str() << myKpVec[i];
}
  fs.release();

//TO READ
vector<Keypoint> myKpVec;
FileStorage fs(filename,FileStorage::READ);
ostringstream oss;
Keypoint aKeypoint;
for(size_t i;i<myKpVec.size();<++i) {
    oss << i;
    fs[oss.str()] >> aKeypoint;
    myKpVec.push_back(aKeypoint);
}
fs.release();
Run Code Online (Sandbox Code Playgroud)

朱利安,


The*_*dge 7

char* key;
FileStorage f;
vector<Keypoint> keypoints;

//writing 
write(f, key, keypoints);

//reading
read(f[key], keypoints);
Run Code Online (Sandbox Code Playgroud)