2

我写了下面的代码来感受一下特征检测。但我无法理解的是,为什么我们需要MatOfMatch对象,它需要什么?

代码

public static void main(String[] args) {
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    Mat img_0 = Highgui.imread(PATH_0);
    Mat img_0_rev = Highgui.imread(PATH_1);
    Mat img_output = new Mat();

    FeatureDetector fDetect = FeatureDetector.create(FeatureDetector.SIFT);

    MatOfKeyPoint mKeyPoints_0 = new MatOfKeyPoint();
    fDetect.detect(img_0, mKeyPoints_0);
    System.out.println("mKeyPoint_0: " + mKeyPoints_0.size());

    MatOfKeyPoint mKeyPoints_1 = new MatOfKeyPoint();
    fDetect.detect(img_0_rev, mKeyPoints_1);
    System.out.println("mKeyPoint_1: " + mKeyPoints_1.size());

    MatOfDMatch mDMatch = new MatOfDMatch();

    //Features2d.drawKeypoints(mKeyPoints_0, mKeyPoints_0, outImage, Scalar color, Features2d.DRAW_RICH_KEYPOINTS);
    Features2d.drawMatches(img_0, mKeyPoints_0, img_0_rev, mKeyPoints_1, mDMatch, img_output);
4

1 回答 1

3

我对 Java API 并不完全熟悉,但我想这个过程在任何语言中都是相似的。

如果您只想检测特征(关键点),那么您不需要使用匹配。

但是,如果您想匹配两个图像之间的特征,那么还有更多工作要做。

一般步骤如下:

  1. 使用特征检测器检测图像上的特征(关键点)。
  2. 使用描述符提取器提取关键点的描述符。
  3. 使用描述符匹配器比较描述符以创建匹配 (DMatch)。
  4. 整理出你最好的比赛并画出来。
于 2015-03-27T15:06:39.583 回答