2

我使用 OpenCV 编写了简单的模板匹配程序,它在 Android 和 OSx 上产生了令人惊讶的不同结果。

首先,看看我在做什么:

  IplImage *image = cvLoadImage("test3a.png", -1);
  Mat templateMat(image);

  // detecting keypoints
  OrbFeatureDetector detector(500);
  std::vector<KeyPoint> templateKeypoints;
  detector.detect(templateMat, templateKeypoints);

  // computing descriptors
  Mat templateDescriptors;
  OrbDescriptorExtractor extractor;
  extractor.compute(templateMat, templateKeypoints, templateDescriptors);

  // matches
  BFMatcher matcher(cv::NORM_HAMMING2);
  std::vector<std::vector<DMatch> > matches;
  matcher.knnMatch(templateDescriptors, templateDescriptors, matches, 2);


现在接下来看看我得到了什么:

在运行 Android 4.2.2 和 OSx 10.7(Lion) 的 Nexus i9250 上运行相同的代码段会得到以下结果:

  • 垫对象:在两个操作系统上都相同
  • 要点:[在 Android 上][2]、[在 OSx 上][3]、[差异][4]
  • 描述符:[在 Android 上][5]、[在 OSx 上][6]、[DIFFERENCE][7]
  • 匹配项:[在 Android 上][8]、[在 OSx 上][9]、[差异][10]

注意: 如果我对这些文件进行排序,则没有区别;所以我没有得到的是,为什么我得到不同的排序结果?让它们按顺序排列是我的要求,因为我需要进一步计算。此外,在同一平台上运行相同的代码片段总是会产生相同的有序结果。

Stackexchange 限制我的帐户在帖子中发布超过 2 个链接,因此请检查链接的评论。

4

0 回答 0