我正在尝试计算两个极线立体图像中相应关键点的差异 . 我知道如何获取关键点,描述符然后计算DMatch,但后来我使用这个简单的操作来获得差异,我不确定它是否正常:

float disparity = keypointsLeft[matches[i].queryIdx].pt.x - keypointsRight[matches[i].trainIdx].pt.x;

(匹配定义为: vector <DMatch> matches 然后计算)

为什么我不确定? OpenCV文档2.4.12说:

1)for DescriptorExtractor::compute

void DescriptorExtractor::compute(const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors) const

关键点 - 输入关键点的集合 . 无法计算描述符的关键点 are removed and the remaining ones may be reordered . 有时可以添加新关键点,例如:SIFT复制具有多个主导方向的关键点(对于每个方向) .

2)for DMatch

用于匹配关键点描述符的类:查询描述符索引,列车描述符索引,列车图像索引和描述符之间的距离 .

问题是:描述符索引是否与其对应的关键点索引相同,何时我们可以读取 descriptors vector doesn't contain the data for each detected keypoint

我会亲自检查一下,但我不知道怎么做...也许有人也对这个问题感到疑惑 . 我的应用程序正在运行,看起来很好,但这并不意味着它没问题......