good_matches.push_back(matches[i]);是什么意思?
时间: 2024-03-05 15:49:30 浏览: 95
`good_matches.push_back(matches[i])` 是将 `matches` 向量中的第 `i` 个匹配结果加入到 `good_matches` 向量中的操作。
在使用 OpenCV 进行特征匹配时,匹配算法通常会返回多个匹配结果,其中一些结果可能是错误的或者噪声。为了提高匹配的准确性,我们需要对匹配结果进行筛选,只保留一些高质量的匹配结果。
在本例中,`matches` 向量中存储了所有的匹配结果,而 `good_matches` 向量则存储了筛选后的高质量匹配结果。具体的筛选方法可以根据具体的问题进行选择。在这个例子中,我们使用了一个简单的方法,即根据匹配结果的距离进行筛选。具体来说,对于每个匹配结果,如果它的距离小于一定的阈值,则将它加入到 `good_matches` 向量中。具体代码如下:
```c++
vector<DMatch> good_matches;
double min_dist = 1000, max_dist = 0;
for (int i = 0; i < matches.size(); i++) {
double dist = matches[i].distance;
if (dist < min_dist) min_dist = dist;
if (dist > max_dist) max_dist = dist;
}
for (int i = 0; i < matches.size(); i++) {
if (matches[i].distance < 3 * min_dist) {
good_matches.push_back(matches[i]);
}
}
```
上述代码中,我们首先遍历所有的匹配结果,找到最小距离和最大距离,然后再遍历一遍匹配结果,将距离小于三倍最小距离的匹配结果加入到 `good_matches` 向量中。这样就可以保留一些高质量的匹配结果,并去除一些错误的匹配。
阅读全文