我使用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上运行相同的代码段会显示以下结果:
- Mat Objects:两个操作系统上相同
- 关键点:[在Android上] [2],[在OSx上] [3],[差异] [4]
- 描述符:[在Android上] [5],[On OSx] [6],[DIFFERENCE] [7]
- 匹配:[在Android上] [8],[On OSx] [9],[DIFFERENCE] [10]
注意: 如果我对这些文件进行排序,没有区别;所以我没有得到的是,为什么我得到不同的有序结果? 按顺序获取它们是我的要求,因为我需要进一步计算。 此外,在同一平台上运行相同的代码片段始终会生成相同的有序结果。
Stackexchange限制我的帐户在帖子中发布超过2个链接,因此请检查链接的评论。