C++ OpenCV与std::vector不兼容?(_crtIsValidHeapPointer错误)

C++ OpenCV与std::vector不兼容?(_crtIsValidHeapPointer错误),c++,visual-studio,opencv,C++,Visual Studio,Opencv,我很难在向量中获取OpenCV中的类/结构,并且在没有任何堆损坏的情况下使函数保持活动状态。每当打开本机OpenCV对象的向量时,垃圾收集过程中就会出现可怕的_crtIsValidHeapPointer错误 上下文:尝试使用ORB比较对象和场景图像中的匹配点。在C++中使用OpenCV 2.3.1。p> 代码示例: vector< KeyPoint > objImageKeypoints; Mat objImageDescriptors; OrbFeatureDetector det

我很难在向量中获取OpenCV中的类/结构,并且在没有任何堆损坏的情况下使函数保持活动状态。每当打开本机OpenCV对象的向量时,垃圾收集过程中就会出现可怕的_crtIsValidHeapPointer错误

上下文:尝试使用ORB比较对象和场景图像中的匹配点。在C++中使用OpenCV 2.3.1。p> 代码示例:

vector< KeyPoint > objImageKeypoints;
Mat objImageDescriptors;
OrbFeatureDetector detector = orbFeatureDetector( 1000 );

detector.detect( objImage, objImageKeypoints );

... // There's more, but I've commented out the rest
}
在我通过检测方法之后,就没有回头路了。在那之后,它仍然会给我带来麻烦


一旦我到达函数的末尾,系统就会崩溃。我是否遗漏了什么,或者我使用向量犯了OpenCV的一些主要错误?

因为OpenCV文档在第一个代码块的读写函数中也包含向量,这不应该是问题的根源


可能是您在该函数中执行的任何其他操作都会导致错误。

因为OpenCV文档也会在第一个代码块中对读写函数进行矢量化,所以这不应该是问题的根源


可能是您在该函数中执行的任何其他操作都会导致此错误。

我在使用Visual Studio 2012版本11和OpenCV2.4.3最初仅为2010版本10构建时遇到此问题。 我在版本10中使用lib和dll。 然后我为2012年构建了nad,现在它可以正常工作,没有堆损坏错误


注意:在使用为版本10构建的版本之前,我在使用opencv函数之前调整了vector的大小。

我在使用Visual Studio 2012版本11和OpenCV2.4.3最初仅为2010版本10构建的版本时遇到了这个问题。 我在版本10中使用lib和dll。 然后我为2012年构建了nad,现在它可以正常工作,没有堆损坏错误


注意:在使用Build for version 10之前,我在使用opencv函数之前调整了vector的大小。

我今天遇到了HoughLinesP函数的这个问题

通过搜索互联网和研究类似的问题,我终于找到了答案。VisionC在这里的回答似乎是正确的,但缺少一些解释。我想你不再需要答案了,但这可能会对其他人有所帮助

问题是: 我不是专家,但据我所知,用于构建OpenCV的平台工具集是v100,即Visual Studio 10中使用的工具集。在Visual Studio 11 2012中,项目默认使用较新的v110平台工具集。我还没有找到任何说明OpenCV的新版本是否使用v110的信息

似乎正在发生的事情是,您给出了一个OpenCV函数,该函数正在使用一些v100 dll的向量,然后该函数对其进行修改。当程序使用v110 dll清理向量时,由于OpenCV对其进行了修改,因此存在不兼容,从而导致错误

对不起,这太含糊了,但正如我所说的,我真的不明白它的来龙去脉

如何修复它: 无论如何,我在这方面找到的答案并没有很好的解决办法。他们会谈论重建OpenCV和其他乏味的事情。正如您所发现的,返回到VS2010可以解决这个问题,但是必须转换项目并返回到旧的IDE并不是很有趣。如果您像我一样使用C++/CLI,则在VS2010中无法获得IntelliSense:

只需转到VS2012中的项目属性即可。确保将配置设置为所有配置。然后,在“配置属性->常规->平台工具集”下选择Visual Studio 2010 v100。这应该可以解决问题,将来如果需要,您可以轻松地更改设置


如前所述,您仍然需要安装VS 2010或Windows平台SDK才能做到这一点。

我今天遇到了HoughLinesP函数的问题

通过搜索互联网和研究类似的问题,我终于找到了答案。VisionC在这里的回答似乎是正确的,但缺少一些解释。我想你不再需要答案了,但这可能会对其他人有所帮助

问题是: 我不是专家,但据我所知,用于构建OpenCV的平台工具集是v100,即Visual Studio 10中使用的工具集。在Visual Studio 11 2012中,项目默认使用较新的v110平台工具集。我还没有找到任何说明OpenCV的新版本是否使用v110的信息

似乎正在发生的事情是,您给出了一个OpenCV函数,该函数正在使用一些v100 dll的向量,然后该函数对其进行修改。当程序使用v110 dll清理向量时,由于OpenCV对其进行了修改,因此存在不兼容,从而导致错误

对不起,这太含糊了,但正如我所说的,我真的不明白它的来龙去脉

如何修复它: 无论如何,我在这方面找到的答案并没有很好的解决办法。他们会谈论重建奥普 nCV和其他单调乏味的事情。正如您所发现的,返回到VS2010可以解决这个问题,但是必须转换项目并返回到旧的IDE并不是很有趣。如果您像我一样使用C++/CLI,则在VS2010中无法获得IntelliSense:

只需转到VS2012中的项目属性即可。确保将配置设置为所有配置。然后,在“配置属性->常规->平台工具集”下选择Visual Studio 2010 v100。这应该可以解决问题,将来如果需要,您可以轻松地更改设置


如前所述,您仍然需要安装VS 2010或Windows平台SDK才能做到这一点。

我在OpenCV3中遇到了同样的问题,我找到了答案。 在我的例子中,问题是我使用的是发行版的Libs,而不是调试版的Libs 您需要确保使用正确的Libs/dll
在调试时,请确保使用调试库/DLL。

我在OpenCV3中遇到了同样的问题,我找到了答案。 在我的例子中,问题是我使用的是发行版的Libs,而不是调试版的Libs 您需要确保使用正确的Libs/dll
在调试时,请确保使用调试库/DLL。

我已添加detector.detect行。在此之后,在示例和代码中,没有其他事情发生。其余的我已经注释掉了。还是爆炸了,我加了探测器,探测线。在此之后,在示例和代码中,没有其他事情发生。其余的我已经注释掉了。我把IDE从VS11切换到了10Express,这似乎解决了问题。我将把这归因于OpenCV臭名昭著的糟糕设置,但我会留下问题,以防有更好的答案。我已经在vs2008中编译了我的OpenCV源代码,同样的错误发生了,如何解决?请帮助查看这个问题[问题]:可能这就是您的问题所有配置->常规->平台工具集->Visual Studio 2010 v100为我解决了问题。我将IDE从VS11切换到10 Express,这似乎解决了问题。我将把这归因于OpenCV臭名昭著的糟糕设置,但我会留下问题,以防有更好的答案。我已经在vs2008中编译了我的OpenCV源代码,同样的错误发生了,如何解决?请帮助查看此问题[问题]:可能这是您的问题所有配置->常规->平台工具集->Visual Studio 2010 v100为我解决了问题。我已在vs2008中编译了我的opencv源代码,发生相同错误时如何解决?请帮忙以上答案是正确的。我不得不在正确的版本下重新安装opencv visual studio,错误和其他许多错误都消失了。我已经在vs2008中编译了我的opencv源代码,发生相同的错误如何解决?请帮忙以上答案是正确的。我不得不在正确的版本下重新安装opencv visual studio,错误和其他许多错误都消失了。我在3.1 libs上也遇到了同样的问题,经过数小时的搜索,我终于找到了解决问题的答案。谢谢我在3.1libs上也遇到了同样的问题,经过数小时的搜索,我终于找到了你的答案,解决了这个问题。谢谢