在搜索了一些没有解决方案的相关帖子后,我想向您提出这个问题: 我正在使用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 但是,该帖子没有提供确定的解决方案。
此时我还不太清楚其他哪些信息可以用来缩小错误范围。请告诉我你的需求。
感谢先进的任何帮助。
答案 0 :(得分:0)
经过大量的逐步调试后,似乎必须将宏_ITERATOR_DEBUG_LEVEL设置为等于1。 这可以在VS2015的项目属性> C / C ++>预处理器>预处理器定义下完成。 我收到了一个新的调试断言错误。我会继续战斗并在以后加强我的答案。