我正在玩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 ));
但这也行不通。
如果有人能解释如何使用带掩码的Matcher或者将其迁移到OpenCV 3.0,我会很棒。
答案 0 :(得分:2)
您可以将BestOf2NearestRangeMatcher
与range_width=2
一起使用,这应该比使用蒙版更快,因为内部循环会更短,请参阅the code here。