我在VS2010下有一个多线程C ++ Qt程序,其中一个线程运行图像处理算法。
我知道我的算法有效,因为它在控制台应用程序中运行良好,我只是将其复制并粘贴到项目中......然后我得到了所有这些奇怪的错误。
代码是:
//...some stuff
leftMat = imread("M:/Desktop/PsEyeRight1.jpg", CV_LOAD_IMAGE_COLOR);
cvtColor(leftMat, leftMat, CV_RGB2GRAY);
GaussianBlur(leftMat, leftMat, Size(3, 3), 0, 0, 4);
threshold(leftMat, leftMat, 150, 255, THRESH_BINARY); contoursLeft.clear();
hierarchyLeft.clear();
Mat contourImage = leftMat.clone();
findContours(contourImage, contoursLeft, hierarchyLeft, CV_RETR_LIST, CV_CHAIN_APPROX_NONE, Point(0, 0));
//...some stuff
当执行命中findContours()
时,我得到一个StackOverflow为“ SARA.exe中0x100a9985(opencv_core246d.dll)的未处理异常:0xC00000FD:堆栈溢出。”
所以我要配置属性>链接器>系统>堆叠预留大小并将其更改为“ 100000000 ”(100MB)
这次错误更改... cvtColor()
崩溃,错误“ SARA.exe中0x774fc41f处的未处理异常:Microsoft C ++异常:并发:: scheduler_resource_allocation_error在内存位置0x1f63ad64 .. “在concrt.h,如果我删除cvtColor()
,Threshold()
会以同样的方式崩溃。
我正在将其编译为/ MDd(多线程调试DLL),我还在OpenCV上运行CMake以清除选项“BUILD_WITH_STATIC_CRT”,我再次编译openCV,我看到的项目都有/ MDd同样。
有没有人猜测发生了什么?
编辑: 为了说清楚,我的系统中有足够的可用内存来运行程序。