如何使用 BestOf2NearestMatcher 匹配掩码

How to use BestOf2NearestMatcher matching mask

我正在玩 OpenCV 3.0 及其 panorama sample

它有效,现在我想针对我的用例逐步了解和优化它。 英特尔发布了一个article,非常适合我的需要。

他们说可以通过只比较相邻图像来改进匹配。

以下代码:

 vector<MatchesInfo> pairwise_matches;     
 BestOf2NearestMatcher matcher(try_cuda, match_conf);
 matcher(features, pairwise_matches);
 matcher.collectGarbage();

应改为:

vector<MatchesInfo> pairwise_matches;
BestOf2NearestMatcher matcher(try_cuda, match_conf);
Mat matchMask(features.size(),features.size(),CV_8U,Scalar(0));
for (int i = 0; i < num_images -1; ++i)
{
    matchMask.at<char>(i,i+1) =1;
}
matcher(features, pairwise_matches,matchMask);
matcher.collectGarbage();

但这不起作用,因为 matcher() 在 OpenCV 3.0 中需要 UMatUMat 没有 at() 函数。

我也试过:

matcher(features, pairwise_matches,matchMask.getUMat(ACCESS_READ ));

但这也行不通。

如果有人可以解释如何使用带有掩码的匹配器或者可以将其迁移到 OpenCV 3.0,我会很棒。

您可以将 BestOf2NearestRangeMatcherrange_width=2 一起使用,这应该比使用掩码更快,因为内部循环会更短,请参阅 the code here