如何使用 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 中需要 UMat
而 UMat
没有 at()
函数。
我也试过:
matcher(features, pairwise_matches,matchMask.getUMat(ACCESS_READ ));
但这也行不通。
如果有人可以解释如何使用带有掩码的匹配器或者可以将其迁移到 OpenCV 3.0,我会很棒。
您可以将 BestOf2NearestRangeMatcher
与 range_width=2
一起使用,这应该比使用掩码更快,因为内部循环会更短,请参阅 the code here。
我正在玩 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 中需要 UMat
而 UMat
没有 at()
函数。
我也试过:
matcher(features, pairwise_matches,matchMask.getUMat(ACCESS_READ ));
但这也行不通。
如果有人可以解释如何使用带有掩码的匹配器或者可以将其迁移到 OpenCV 3.0,我会很棒。
您可以将 BestOf2NearestRangeMatcher
与 range_width=2
一起使用,这应该比使用掩码更快,因为内部循环会更短,请参阅 the code here。