http://docs.opencv.org/2.4.2/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.htmlを参照してください。
私のコードのある時点で、私は呼び出します
myDescriptorMatcher.match(descriptors, result);
今、結果の一致をフィルタリングしたい場合は、次のような醜いことをしなければならないと思います:
List<DMatch> matchesList = matches.toList();
double maxDistance = 0;
double minDistance = 1000;
int rowCount = matchesList.size();
for (int i = 0; i < rowCount; i++) {
double dist = matchesList.get(i).distance;
if (dist < minDistance) minDistance = dist;
if (dist > maxDistance) maxDistance = dist;
}
List<DMatch> goodMatchesList = new ArrayList<DMatch>();
double upperBound = 6 * minDistance;
for (int i = 0; i < rowCount; i++) {
if (matchesList.get(i).distance < upperBound) {
goodMatchesList.add(matchesList.get(i));
}
}
MatOfDMatch goodMatches = new MatOfDMatch();
goodMatches.fromList(goodMatchesList);
Features2d.drawMatches(mPreviousGray.submat(roi), mPrevDetectedFeatures, m.submat(roi), curDetectedFeatures, goodMatches, result);
- これは、リストへの醜い前後の変換なしで実行できますか?
- JNI 経由でこれを実行しようとしましたが、MatOFDMatch を Java から C++ に転送して戻すにはどうすればよいですか?