我在Visual Studio 2013中用c++和OpenCV 2.49写了一些代码:
cv::Mat mask = Mat::zeros(tmp.size(), CV_8UC1);
修改掩码,一些元素为0,一些元素为255
cv::vector<cv::vector<cv::Point> > contours;
cv::vector<cv::Vec4i> hierarchy;
cv:findContours(mask, contours, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);
cv::imshow("Mask", mask);
当方法结束时,出现以下错误:
RtlValidateHeap指定的无效地址(004D0000, 02EBD9D8)exe触发了一个断点。
我在stackoverflow和其他平台上搜索,但找不到答案!
我将正确的opencv路径添加到"path"环境变量:C:opencvbuildx86vc12bin还有项目配置:C: opencv x86 vc12 lib 制造
如果我使用合并/分裂从opencv api,它会导致相同的错误,但在这种情况下,它是可能分配他们的矢量之前进入方法。然后它就起作用了。在这种情况下,不可能预先分配vector,因为我不知道它的大小。
我认为问题是opencv分配内存,这不是在正确的堆,但我检查了所有的dll和路径。你还有别的主意吗?
提前感谢!
编辑:我用新下载的opencv替换了opencv文件夹,它可以工作,不要问我为什么!
cv::vector声明有效吗?你应该尝试std::vector来代替它们。根据给定的代码,很难确定是什么导致了问题。你能否提供更多细节?
还要注意,这个"函数在提取轮廓的同时修改图像"。
您还应该检查以下属性:
- 右键单击项目
- 属性-配置属性-通用:将平台工具集设置为Visual Studio 2013 (v120)
- 配置属性- C/c++ -代码生成-设置运行库:多线程调试DLL (/MDd)用于调试构建或多线程DLL (/MD) for release build