我使用 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 个链接,因此请检查链接的评论。