过滤MatOfDMatch

use*_*489 5 java java-native-interface android opencv feature-tracking

请参阅http://docs.opencv.org/2.4.2/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.html

在我的代码中的某个时刻,我调用

myDescriptorMatcher.match(descriptors, result);
Run Code Online (Sandbox Code Playgroud)

现在,如果我想过滤结果匹配,我相信我必须做一些难看的事情,例如:

        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);
Run Code Online (Sandbox Code Playgroud)
  1. 无需在列表中进行来回转换,就能做到这一点吗?
  2. 我已经尝试通过JNI执行此操作,但是如何将MatOFDMatch从Java传输到C ++并返回呢?