0

我对什么是 OpenCV (feature2D) 匹配感到困惑,我正在使用 OpenCVSharp 并执行以下操作:

                var pt1 = detector.Detect(img1);
                var pt2 = detector.Detect(img2);

                Mat desc1 = new Mat();
                Mat desc2 = new Mat();

                extractor.Compute(img1, ref pt1, desc1);
                extractor.Compute(img2, ref pt2, desc2);

                var matcher = new BFMatcher();
                var matches = matcher.Match(desc1, desc2);

                Cv2.DrawMatches(img1, pt1, img2, pt2, matches, target);

这工作得很好,但是我不想画它们,我想自己从这些匹配中做一些事情,但是匹配中的所有项目都是具有以下数据的项目数组:QueryIdx TrainIdx Distance 和 ImgIdx。ImgIdx 听起来无关紧要(始终为 0),我能想到的只是 QueryIdx 和 TrainIdx 将分别是 Pt1 和 Pt2 中的点的索引,但似乎并非如此,就好像我在匹配中获得第一个结果时它具有以下数据:

{DMatch (QueryIdx:0, TrainIdx:4, ImgIdx:0, Distance:414.4816)}

如果我尝试分别获得以下数据,这将导致 Pt1 的 index0 和 Pt2 的 index4:

{(x:1490.127 y:1808.562)}
{(x:1852.559 y:1789.147)}

但是,如果我计算我们得到的这些点之间的距离

1808.562 - 1789.147 = 19.415
1852.559 - 1490.127 = 382.432
19.415²  = 376.942
482.432² = 146254.234
376.942 + 146254.234 = 146631.176
sqrt(146631.176) = 382.431
And finally 382.431 != 414.4816

那我错过了什么?

4

0 回答 0