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