gpt4 book ai didi

c++ - 如何将 vector 写入 FileStorage

转载 作者:太空宇宙 更新时间:2023-11-03 22:31:11 24 4
gpt4 key购买 nike

我已经能够使用 FileStorage 成功地将关键点( vector )、描述符(Mat)和其他内容写入 yml 文件。但是,在我计算出一对图像之间的匹配项后,我无法将匹配项写入文件。

我假设这是因为 DMatch 似乎是一个具有距离、trainIdx 等字段的结构,但是有人有将其写入文件的好方法吗?

或者我应该只写一个距离 vector 、一个 trainIdx vector 等?

编辑以显示一些代码:

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;
}

最佳答案

您可以为文件存储重载 >>> 运算符。

来自 here 的 cv::TermCriteria 的工作示例代码:

void operator>>(const cv::FileNode &node,
cv::TermCriteria &termCrit) {
node["type"] >> termCrit.type;
node["maxCount"] >> termCrit.maxCount;
node["epsilon"] >> termCrit.epsilon;
}

cv::FileStorage &operator<<(cv::FileStorage &fs,
const cv::TermCriteria &termCrit) {
fs << "{" << "type" << termCrit.type << "maxCount"
<< termCrit.maxCount << "epsilon" << termCrit.epsilon
<< "}";
return fs;
}

关于c++ - 如何将 vector<Dmatch> 写入 FileStorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24193717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com