我已经能够使用FileStorage成功地将关键点(向量),描述符(Mat)和其他东西写入yml文件 . 但是,在我计算一对图像之间的匹配后,我无法将匹配写入文件 .
我假设它是因为DMatch似乎是一个具有distance,trainIdx等字段的结构,但是有没有人有一个很好的方法将它写入文件?
或者我应该只写一个距离向量,trainIdx向量等?
编辑显示一些代码:
std::vector<cv::DMatch> matches;
for(int i=0;i<numims-1;i++){
for(int j=i+1;j<min(i+10,numims);j++){
matches = MatchImagePair(i,j);
//write the matches
std::string matchfile = matchpath + "matchesij.yml";
cv::FileStorage fs(matchfile, cv::FileStorage::WRITE);
write(fs, "matches", matches);
fs.release();
}
}
matchesij应该包含i和j的数字,但为了简洁我编辑了 .
此外, MatchImagePair
看起来像:
std::vector<cv::DMatch> Matches::MatchImagePair(int idx1, int idx2){
//matcher type
cv::BFMatcher matcher(cv::NORM_L2);
//given descrs1 and descrs2, match the 2 descriptors
matcher.knnMatch(descrs1, descrs2, matches12, 2);
matcher.knnMatch(descrs2, descrs1, matches21, 2);
//various tests, returns vector<DMatch> given keypts1, keypts2 (for RANSAC)
matches = DoVariousTests(matches12, matches21, keypts1, keypts2);
return matches;
}
1 回答
您可以重载
>>
运算符以进行文件存储 .来自here的cv :: TermCriteria的工作示例代码: