繁体   English   中英

OpenCV中的调试声明错误

[英]Debug Assertion Error in OpenCV

我在OpenCV中进行线检测。 一切正常,直到我收到此Debug断言错误:

调试断言失败! 表达式:_pFirstBlock == pHead

断言的屏幕截图

我花了几天时间在上面,但无法调试。 这是我的代码。

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;

int main() {
VideoCapture stream1(0);  
while (true) {
    Mat cameraFrame;
    stream1.read(cameraFrame);
    imshow("cam", cameraFrame);

    if (waitKey(30) >= 0)
        break;

    Mat src = cameraFrame;


    Mat dst, cdst;
    Canny(src, dst, 50, 200, 3);
    cvtColor(dst, cdst, CV_GRAY2BGR);

   vector<Vec4i> lines;

    HoughLinesP(dst, lines, 1, CV_PI / 180, 50, 50, 10);
    for (size_t i = 0; i < lines.size(); i++)
    {
    Vec4i l = lines[i];
    line(cdst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0, 0, 255), 3, CV_AA);
    }

    imshow("processed", cdst);


}
return 0;
}

发生这种情况是因为传统上OpenCV库是使用以下运行时库编译的:

  • MD (发行)
  • MDd (调试)

而我的IDE Qt Creator (其默认配置使用MSVC 2013)通过以下方式构建内容:

  • MT (发布)
  • MTd (调试)

出人意料的是,该错误仅在HOG的compute()被调用时才显示出来。

要全面了解MT与MD(运行时库)的困境, 请阅读本章

有两种方法可以解决此问题。 简单的方法是调整项目设置,以同时将MD / MDd用作运行时库并与OpenCV匹配!

在Qt Creator上,可以通过添加以下内容在.pro文件中完成此操作:

QMAKE_CXXFLAGS_DEBUG += /MDd
QMAKE_CXXFLAGS_RELEASE += /MD

另一方面,在某些版本的Visual Studio中,可以通过Project Properties >> Configuration Properties >> C/C++ >> Code Generation并将Runtime Library更改为:

  • 多线程调试DLL(/ MDd) (如果要构建代码的调试版本)。
  • 多线程DLL(/ MD) (如果要构建代码的发布版本)。

解决此问题的另一种方法是在启用 BUILD_WITH_STATIC_CRT情况下重建/重新编译OpenCV。 这将编译具有MT / MTd支持的OpenCV库。

也许它的解决方案就像对我有帮助的解决方案一样。

您尝试使用为Windows端指定了带有/ clr的Winforms来调用非托管代码,该代码有时引用了ATL标头。

您需要在链接器依赖项中绑定opencv库(opencv_calib2411d,...关心Debug / Release和您使用的opencv版本)

额外:

在项目设置的“链接器”部分的“强制符号参考”部分中添加__DllMainCRTStartup @ 12。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/62db4002-4ebc-4a3a-91ec-9fc702db821e/crtisvalidheappointerpuserdata-why-is-this-code-broken-vs2008?forum=vcgeneral

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM