0

我正在使用 openCV (java),并且我有一个最佳匹配列表。这是我的代码:

  final MatOfKeyPoint keyPoints1 = new MatOfKeyPoint();
  final MatOfKeyPoint keyPoints2 = new MatOfKeyPoint();
  ...
  MatOfDMatch matches = new MatOfDMatch();
  ...
  List<DMatch> matchesList = matches.toList();
  List<DMatch> bestMatches = new ArrayList<DMatch>();

    for (int i = 0; i < matchesList.size(); i++)
        {
            Double dist = (double) matchesList.get(i).distance;

            if (dist < threshold)
            {
                bestMatches.add(matches.toList().get(i));
            }
        }

我知道我必须使用火车和查询描述符的索引,但我不知道如何。我已经尝试过这样的尝试,但由于MatOfKeyPoint无法像 Java 中的数组一样访问,因此无法正常工作。

for(int i = 0; i < bestMatches.size(); i++)
{
    keyPoints1[bestMatches.get(i).queryIdx].pt;
    keyPoints2[bestMatches.get(i).trainIdx].pt;
}

如何找到像素坐标?

4

1 回答 1

1
LinkedList<Point> queryList = new LinkedList<Point>();
LinkedList<Point> trainList = new LinkedList<Point>();

List<KeyPoint> keypoints_queryList = keyPoints1.toList();
List<KeyPoint> keypoints_trainList = keyPoints2.toList();

for (int i = 0; i < bestMatches.size(); i++) {
   queryList.addLast(keypoints_queryList.get(bestMatches.get(i).queryIdx).pt);
   trainList.addLast(keypoints_trainList.get(bestMatches.get(i).trainIdx).pt);
}


MatOfPoint2f queryCoords = new MatOfPoint2f();
queryCoords.fromList(queryList);

MatOfPoint2f trainCoords = new MatOfPoint2f();
trainCoords.fromList(trainList);

希望这可以帮助 !!

于 2019-12-09T15:11:40.237 回答