【发布时间】:2014-04-17 14:23:15
【问题描述】:
在 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
当尝试使用 good_nnMatches 而不是本教程中描述的 good_matches 调用 drawMatches 时。
drawMatches( roiImg, keypoints_object, compare, keypoints_scene,
good_NNmatches, img_matches, Scalar::all(-1), Scalar::all(-1),
vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );
【问题讨论】:
-
我不知道这是否是您的问题的原因,但您的条件是错误的。如果
nnMatches[k][0].distance / nnMatches[k][1].distance < ratio,则应在good_NNmatches中添加匹配项。 -
这并没有解决断言错误,但我现在已经更改了条件并找到了解决问题的方法,谢谢。
-
我们为什么不删除 DRAW.CPP 中的断言??????????
标签: c++ opencv feature-detection