2

由于某些原因,我需要过滤掉 Mat 的行。(我需要过滤掉一些ORB的描述符)

你建议我哪种方式?我还没有找到从 Mat 中删除单行的任何方法。所以我在想我可以迭代地将好的行插入到一个新的 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
   }
}

在检查某些条件(或仅在新 Mat 中添加选定行)后,您将如何从 Mat 中删除单行?

或者如何将新行迭代地添加到新 Mat 中?

4

1 回答 1

4

使用 迭代添加新行很简单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);
    }
}
于 2013-05-24T18:15:33.167 回答