Opencv 的“findContours”错误:线程停止,代码为 -1073740777

Posted

技术标签:

【中文标题】Opencv 的“findContours”错误:线程停止,代码为 -1073740777【英文标题】:Opencv's "findContours" error : Thread stopped with code -1073740777 【发布时间】:2016-06-06 12:32:05 【问题描述】:

我目前正在开发一个程序来处理 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;

我的 VS 解决方案拥有 2 个项目: DLLCam:我的函数被定义和构建为 dll Project_Camera:我在哪里调用 dll 中的函数

要使用 opencv,我按照此链接 (http://funvision.blogspot.fr/2015/11/install-opencv-visual-studio-2015.html) 构建它以获得 32 位 3.1 版本的 opencv。 我正确设置了项目的属性以使用该库。

然后,我想知道可能导致问题的原因,以及如何解决。

感谢您的帮助。

【问题讨论】:

您可能在发行版中混合了调试 OpenCV 库,反之亦然。还要检查您是否使用 vc14 来编译 OpenCV 库和您的项目。并且您正在根据链接的库和项目设置使用静态或动态链接 首先,感谢您的快速答复!如我提供的链接中所述,我构建了 opencv 的发布和调试版本,但我必须在 D:\opencv\build\install\include 或 D:\opencv\build\install\x86\vc14\lib 中包含或链接库,所以我想我不能真正混合调试或发布版本的 opencv 吗?检查第二件事,我对两者都使用相同的VS。第三个:我正在链接.lib库,不知道它是否正确 确保在链接器 -> 输入中输入opencv_&lt;module&gt;310.lib 用于发布,opencv_&lt;module&gt;310d.lib 用于调试(注意尾随的“d”) 好的!那是我错过的东西。问题是我没有以 d 结尾的文件。这是否意味着opencv的构建失败了,只给了我要发布的文件? 在您的教程中有:` - 选择调试和绿色启动。 - 之后选择释放并按绿色开始。 ` 看来你错过了调试。只需重新打开 OpenCV.sln,设置为调试,然后编译 【参考方案1】:

正如 Miki 在 cmets 中所说,问题来自我正在使用的库 (opencv_310.lib)。

我实际上错过了编译 OpenCV 解决方案的 INSTALL 项目以进行调试。然后,文件“opencv_310d.lib”丢失了,我无法链接它们。 在为 Debug 编译后,我找到了这些文件并在链接器 -> 输入中使用它们,从而解决了问题。

【讨论】:

以上是关于Opencv 的“findContours”错误:线程停止,代码为 -1073740777的主要内容,如果未能解决你的问题,请参考以下文章

带有 Visual Studio 2013(C++) 的 OpenCV:findContours 断点错误

Opencv关于findcontours中断问题

findContours 在 opencv 中找不到轮廓

OpenCV cv::findcontours *** 异常

findcontours 断言失败

findContours:OpenCV 已触发断点