我在Visual Studio 2013中用C ++和OpenCV 2.49编写了一些代码:
cv::Mat mask = Mat::zeros(tmp.size(), CV_8UC1);
修改一些元素为零的掩码,一些元素为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,22EBD9D8) Project.exe已触发断点。
我在stackoverflow和其他平台上搜索但找不到答案!
我在“path”环境变量中添加了正确的opencv路径:C:\ opencv \ build \ x86 \ vc12 \ bin 以及项目配置: C:\的OpenCV \建立\ 86 \ VC12 \ lib中
如果我使用opencv api中的merge / split它会导致相同的错误,但在这种情况下,可以在进入方法之前分配ther vector。然后它工作。在这种情况下,以前不可能分配矢量,因为我现在不是大小。
我认为问题是opencv分配内存并且不在正确的堆中,但我检查了所有dll和路径。你还有其他想法吗?
提前致谢!
编辑: 我用一个新下载的opencv替换了opencv文件夹并且它有效,不要问我为什么!
答案 0 :(得分:1)
cv :: vector声明有效吗?你应该尝试std :: vector而不是它们。 基于给定的代码,很难确定导致问题的原因。你能提供更多细节吗?
另请注意,此&#34;功能会在提取轮廓时修改图像&#34; 。
您还应该检查以下属性: