OPENCV3 detectAndCompute中的调试断言失败

时间:2017-02-16 22:46:58

标签: c++ opencv

在搜索了一些没有解决方案的相关帖子后,我想向您提出这个问题: 我正在使用VS2015编译调试配置文件中的一个DBoW3演示(demo_general)。 该演示基本上创建了一个基于所选特征(orb,surf,akaze,brisk等)和一些图像的单词。

第一阶段是从图像中检测和提取特征:

fdetector=cv::ORB::create();
fdetector->detectAndCompute(image, cv::Mat(), keypoints, descriptors);

当在ORB.cpp的OpenCV3实现中到达复制操作时,最后一行抛出异常(第891行):

std::copy(allKeypoints.begin() + offset, allKeypoints.begin() + offset + nkeypoints, keypoints.begin());

例外的屏幕截图:Debug assertion Failed

使用其他功能描述符会在类似操作中导致相同的错误,这就是使用迭代器: allKeypoints.begin()+ offset 请再次注意,这是一个未经修改的OpenCV函数。我还验证了在第一次迭代中“offset”为零,而“nkeypoints”很小,因此不会超出向量边界。虽然在大多数情况下这个错误来自违反矢量边界,但我实际上认为它更多地与用于调试的库的不同签名有关,如下所示: https://social.msdn.microsoft.com/Forums/vstudio/en-US/99a01298-865d-4451-b8c6-3e25db5cbcee/vector-iterator-offset-out-of-range?forum=vclanguage 但是,该帖子没有提供确定的解决方案。

此时我还不太清楚其他哪些信息可以用来缩小错误范围。请告诉我你的需求。

感谢先进的任何帮助。

1 个答案:

答案 0 :(得分:0)

经过大量的逐步调试后,似乎必须将宏_ITERATOR_DEBUG_LEVEL设置为等于1。 这可以在VS2015的项目属性> C / C ++>预处理器>预处理器定义下完成。 我收到了一个新的调试断言错误。我会继续战斗并在以后加强我的答案。