C++ 在OPENCV3 detectAndCompute中调试断言失败

C++ 在OPENCV3 detectAndCompute中调试断言失败,c++,opencv,C++,Opencv,在谷歌搜索了一些没有解决方案的相关帖子后,我想把这个问题告诉你: 我正在用VS2015在调试概要文件中编译一个DBoW3演示(demo_general)。 该演示基本上是基于选定的功能(球体、冲浪、赤色、轻快等)和一些图像创建一个单词包 第一阶段是从图像中检测和提取特征: fdetector=cv::ORB::create(); fdetector->detectAndCompute(image, cv::Mat(), keypoints, descriptors); 最后一行在ORB.

在谷歌搜索了一些没有解决方案的相关帖子后,我想把这个问题告诉你: 我正在用VS2015在调试概要文件中编译一个DBoW3演示(demo_general)。 该演示基本上是基于选定的功能(球体、冲浪、赤色、轻快等)和一些图像创建一个单词包

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

fdetector=cv::ORB::create();
fdetector->detectAndCompute(image, cv::Mat(), keypoints, descriptors);
最后一行在ORB.cpp的OpenCV3实现中达到复制操作时引发异常(第891行):

异常的屏幕截图:

使用其他特征描述符会在类似操作中导致相同的错误,即使用迭代器: 所有关键点。开始()+偏移量 再次注意,这是一个未修改的OpenCV函数。我还验证了在第一次迭代中,“offset”为零,而“nkeypoints”很小,因此不会超过向量边界。尽管在大多数情况下,这个错误来自于违反向量边界,但我实际上认为它更多地与用于调试的库的不同签名有关,如中所述: 然而,这篇文章并没有提供一个决定性的解决方案

在这一点上,我不太清楚还有什么其他信息有助于缩小错误的范围。请告诉我你需要什么


感谢advanced提供的帮助。

经过大量分步调试后,似乎必须将宏“迭代器”调试级别设置为1。 这可以在VS2015中的项目属性>C/C++>预处理器>预处理器定义下完成。
但我得到了一个新的调试断言错误。我将继续努力,并在稍后增强我的答案。

经过大量分步调试后,似乎必须将宏迭代器调试级别设置为1。 这可以在VS2015中的项目属性>C/C++>预处理器>预处理器定义下完成。 但我得到了一个新的调试断言错误。我会继续努力,稍后会加强我的回答

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