c++ - OpenCV 中的调试断言错误

标签 c++ opencv

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

Debug Assertion Failed! Expression: _pFirstBlock == pHead

Screenshot of the assertion

我花了几天时间研究它,但无法调试它。这是我的代码。

#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 库传统上是使用以下 runtime library 编译的:

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

虽然我的 IDE Qt Creator 使用 MSVC 2013 和它的默认配置,但构建东西时:

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

令人惊讶的是,错误仅在调用 HOG 的 compute() 时出现。

要充分理解 MT 与 MD(运行时库)的困境,read this .

有两种不同的方法来处理这个问题。简单的方法是调整您的项目设置以也使用 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),如果您正在构建代码的 Release 版本。

处理此问题的另一种方法是使用 BUILD_WITH_STATIC_CRT enabled 重建/重新编译 OpenCV。这将编译具有 MT/MTd 支持的 OpenCV 库。

关于c++ - OpenCV 中的调试断言错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24881667/

相关文章:

c++ - OpenGL 是否仅针对 vSync fps 更新屏幕?

c++ - 消费者应用程序的安全 TCP 连接建议

C++ If/else/嵌套问题

c++ - 我怎样才能找出这个 ffmpeg 错误代码的含义?

python-2.7 - cv2.destroyWindow() 没有按预期工作

python - 如何保存OpenCV检测到的面部

c++ - 如何获取与某些谓词匹配的类型的索引?

c++ - 通过 `void *` 和 C++ `extern "C"` 函数调用在 C 中初始化一个 C++ 类

c# - 修改EmguCV以使用P/Invoke添加缺少的功能

c++ - visual studio 2012 中的 openCV