从 opencv::Mat 中删除选定的行?

4 arrays opencv vector mat

由于某些原因,我需要过滤掉垫子的行。(我需要过滤掉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 ?

Aur*_*ius 5

使用 迭代添加新行非常简单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)