В openCV я адаптировал этот учебный код в своем приложении.
Я пытался обрезать совпадения, используя коэффициент расстояния до ближайшего соседа, чтобы отображать совпадения только выше определенного порогового значения.
double ratio = 0.9;
std::vector< vector<DMatch > > nnMatches;
std::vector< DMatch > good_NNmatches;
matcher.knnMatch(descriptors_scene, descriptors_object, nnMatches, 2 );
for(int k = 0; k < nnMatches.size(); k++)
{
if(nnMatches[k][0].distance / nnMatches[k][1].distance > ratio)
{
good_NNmatches.push_back(nnMatches[k][0]);
}
}
Затем я пытаюсь нарисовать совпадения в good_NNmatches, используя тот же метод, что и в учебнике, но получаю следующую ошибку:
OpenCV Error: Assertion failed (i1 >= 0 && i1 < static_cast<int>(keypoints1.size())) in drawMatches, file /Users/cgray/Downloads/opencv-2.4.6/modules/features2d/src/draw.cpp, line 207
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /Users/cgray/Downloads/opencv-2.4.6/modules/features2d/src/draw.cpp:207: error: (-215) i1 >= 0 && i1 < static_cast<int>(keypoints1.size()) in function drawMatches
При попытке вызвать drawMatches с использованием good_nnMatches вместо good_matches, как описано в руководстве.
drawMatches( roiImg, keypoints_object, compare, keypoints_scene,
good_NNmatches, img_matches, Scalar::all(-1), Scalar::all(-1),
vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );
good_NNmatches
, еслиnnMatches[k][0].distance / nnMatches[k][1].distance < ratio
. - person BConic   schedule 18.04.2014