C++ Opencv';s";findContours“;错误:线程已停止,代码为-1073740777

C++ Opencv';s";findContours“;错误:线程已停止,代码为-1073740777,c++,multithreading,opencv,C++,Multithreading,Opencv,我目前正在开发一个程序来处理3D相机的数据。不幸的是,我在使用opencv的“findcontours”函数时出错 事实上,当我尝试在程序中使用它时,我会出现以下错误: 线程0x1a4c已停止,代码为0(0x0) 线程0x188c已停止,代码为-1073740777(0xc0000417) 线程0x1c08已停止,代码为-1073740777(0xc0000417) 线程0x1330已停止,代码为-1073740777(0xc0000417) 线程0x1c90已停止,代码为-1073740777

我目前正在开发一个程序来处理3D相机的数据。不幸的是,我在使用opencv的“findcontours”函数时出错

事实上,当我尝试在程序中使用它时,我会出现以下错误:

线程0x1a4c已停止,代码为0(0x0)

线程0x188c已停止,代码为-1073740777(0xc0000417)

线程0x1c08已停止,代码为-1073740777(0xc0000417)

线程0x1330已停止,代码为-1073740777(0xc0000417)

线程0x1c90已停止,代码为-1073740777(0xc0000417)

线程0x1ed4已停止,代码为-1073740777(0xc0000417)

线程0x10d4停止,代码为-1073740777(0xc0000417)

线程0x1a80已停止,代码为-1073740777(0xc0000417)

线程0x11bc已停止,代码为-1073740777(0xc0000417)

线程0x1970停止,代码为-1073740777(0xc0000417)

线程0x1428以-1073740777(0xc0000417)停止

程序“[7932]Project_Camera.exe”已停止,代码为-1073740777(0xc0000417)

此外,我曾经有一个窗口告诉我:

0xc0000417处未处理的异常。。。(ntdll.dll)。内存段 已经损坏了

(如果不够精确,请道歉,但我只记得这一点,没有保存它的确切内容。此外,这是真实错误的翻译,因为我的VS是法语的,因此如果词汇不完全相同,我道歉。)

这是我的密码:

float function (input)
{
   // First i get the datas from the camera and save it in an array of the size DATA_SIZE :
   // float distance[DATA_SIZE] (This array only contain ones and zeros)

   Mat img = Mat(Size(NB_ROW, NB_LINE), CV_32FC1, distance);

   Mat element_o = getStructuringElement(MORPH_ELLIPSE, Size(SIZE_OPEN, SIZE_OPEN), Point(-1, -1));
   Mat element_c = getStructuringElement(MORPH_ELLIPSE, Size(SIZE_CLOSE, SIZE_CLOSE), Point(-1, -1));

   Mat img_output;
   morphologyEx(img, img_output, MORPH_OPEN, element_o);

   Mat img_close;
   morphologyEx(img_output, img_close, MORPH_CLOSE, element_c);

   namedWindow("Image from morph ", CV_WINDOW_AUTOSIZE);
   imshow("Image from morph ", img_close);
   waitKey(0);

   ///Convert the image into B&W CV_8U format for the findContours function
   Mat bwimg;
   img_close.convertTo(bwimg, CV_8U);

   /// Find contours
   vector<vector<Point>> contours;
   printf("here"); // I see this one 
   findContours(bwimg, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);//SIMPLE, Point(0, 0));
   printf("here2"); // this one never show up, the program stops right before
   //... ( Then i get the minAreaRect from the contour and deduce an angle ) 
   return angle;
}
float函数(输入)
{
//首先,我从相机获取数据,并将其保存在大小数据的数组中
//浮动距离[数据大小](此数组仅包含1和0)
Mat img=Mat(尺寸(NB_行,NB_线),CV_32FC1,距离);
Mat element_o=getStructuringElement(变形椭圆,大小(大小打开,大小打开),点(-1,-1));
Mat element_c=getStructuringElement(变形椭圆,大小(大小关闭,大小关闭),点(-1,-1));
Mat img_输出;
形态学(img、img、输出、形态开放、元素开放);
Mat img_close;
形态学(img_输出、img_关闭、变形_关闭、元素_c);
namedWindow(“来自变形的图像”,CV\u窗口\u自动调整大小);
imshow(“来自变形的图像”,img_close);
等待键(0);
///将图像转换为B&W CV_8U格式以用于findContours函数
Mat bwimg;
img_关闭转换器(bwimg,CV_8U);
///寻找轮廓
矢量等值线;
printf(“这里”);//我看到了这个
findContours(bwimg,等高线,CV_RETR_列表,CV_CHAIN_APPROX_NONE);//简单,点(0,0));
printf(“here2”);//这一个永远不会出现,程序就在它出现之前停止
//…(然后我从轮廓得到Minareact并推导出一个角度)
返回角;
}
我的VS解决方案拥有2个项目: DLLCam:其中我的函数被定义并构建为dll Project_Camera:我在其中调用dll中的函数

为了使用opencv,我按照以下链接()构建了它,以获得opencv的32位3.1版本。 我正确设置了项目的属性以使用库

然后,我想知道是什么导致了这个问题,以及如何解决它


谢谢你的帮助。

正如Miki在评论中所说,这个问题来自我正在使用的库(opencv_310.lib)

实际上,我没有编译OpenCV解决方案的安装项目以进行调试。然后,文件“opencv_310d.lib”丢失,我无法链接它们。
编译调试后,我找到了这些文件,并在linker->input中使用它们,从而解决了问题。

您可能在发行版中混用了调试OpenCV库,或者是viceversa。还要检查您是否在编译OpenCV库和项目中使用vc14。根据链接库和项目设置使用静态或动态链接。首先,感谢您的快速回答!我建立了opencv的发行版和调试版,正如我在给出的链接中所说,但我在D:\opencv\build\install\include或D:\opencv\build\install\x86\vc14\lib中包含或链接了库,所以我想我不能真正混合opencv的调试版或发行版?第二件事是检查,我使用相同的VS为这两个。第三个:我正在链接.lib库,不知道它是否正确。请确保在linker->input中,您将
opencv_310.lib
用于发布,将
opencv_310d.lib
用于调试(注意后面的“d”)Ok!这是我错过的。问题是我没有以d结尾的文件。这是否意味着opencv的构建失败,只给了我要发布的文件?在你的教程中有:`-选择调试和绿色启动。-然后选择Release并按绿色开始看来你错过了调试的那个。只需重新打开OpenCV.sln,设置为debug,然后编译