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

时间:2013-05-24 16:10:14

标签: arrays opencv vector mat

由于某些原因,我需要过滤掉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添加新行?

1 个答案:

答案 0 :(得分: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);
    }
}