2017-02-16 290 views
1

搜索后搜索一些相关的职位没有解决方案我想给你带来这个问题: 我正在用VS2015编译调试配置文件中的DBoW3演示之一(demo_general)。 演示基本上创建了一个基于选定的功能(球,冲浪,akaze,轻快等)和一些图像的话袋。调试断言在OPENCV3 detectAndCompute失败

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

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

到达OpenCV3实施ORB.cpp内的复制操作时的最后一行将抛出异常(线891):

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

异常的截屏:Debug assertion Failed

使用其他特征描述符会导致同样的错误,在类似的操作,这是,迭代器的使用: allKeypoints.begin()+偏移量 再次请注意,这是一个未修改的OpenCV函数。我还证实,在第一次迭代中,“偏移量”为零,而“nkeypoints”较小,因此不超过向量边界。尽管在大多数情况下,这个错误来自违反矢量边界,但我实际上认为它与用于调试的库的不同签名有关,如用于调试的指针: https://social.msdn.microsoft.com/Forums/vstudio/en-US/99a01298-865d-4451-b8c6-3e25db5cbcee/vector-iterator-offset-out-of-range?forum=vclanguage 但是,该帖未提供确切的修复方法。

在这一点上我不太了解其他信息可以用来缩小错误的范围。请让我知道你需要什么。

非常感谢您的帮助。

回答

0

经过大量的逐步调试,似乎必须将宏_ITERATOR_DEBUG_LEVEL设置为1。 这可以在VS2015中的Project Properties> C/C++> Preprocessor> Preprocessor Definitions下完成。 虽然我得到了一个新的调试断言错误。我会继续战斗,并在以后加强我的回答。