由于某些原因,我需要过滤掉垫子的行。(我需要过滤掉ORB的一些描述符)
你建议我采取哪种方式?我还没有找到任何方法从垫子上删除单行。所以我想我可以迭代地将好的行插入到新的 Mat 中。
C++ 伪代码(删除):
Mat desc;
ORB(myImage,cv::noArray,kp,desc);
matcher->match( myPreviousDesc, desc, matches );
for(auto i=0;i<matches.size();i++) {
if (some conditions) {
Remove the ith row of desc:
erase( desc.row( matches[i].queryIdx ) ); // pseudo
}
}
Run Code Online (Sandbox Code Playgroud)
检查某些条件后,如何从 Mat 中删除单行(或仅在新 Mat 中添加选定的行)?
或者如何将新行迭代添加到新 Mat ?
使用 迭代添加新行非常简单cv::Mat::push_back()。
仅添加好的描述符可能如下所示:
cv::Mat good_descriptors;
for (auto i = 0; i < matches.size(); ++i)
{
if (/*something*/)
{
cv::Mat row = desc.row(matches[i].queryIdx);
good_descriptors.push_back(row);
}
}
Run Code Online (Sandbox Code Playgroud)