我在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;
}
答案 0 :(得分:2)
这是因为OpenCV库传统上使用以下runtime library编译:
虽然我的IDE Qt Creator 使用 MSVC 2013 及其默认配置,但使用以下内容构建内容:
令人惊讶的是,只有在调用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
更改为:
处理此问题的另一种方法是在BUILD_WITH_STATIC_CRT
启用的情况下重建/重新编译OpenCV。这将使用 MT / MTd 支持编译OpenCV库。
答案 1 :(得分:-1)
也许它的解决方案就像那个对我有帮助的解决方案。
您尝试使用为GUI端指定的带有/ clr的Winforms调用非托管代码,该代码在某些时候引用了ATL标头。
你需要在链接器依赖项中绑定opencv Libarys(opencv_calib2411d,...关心Debug / Release和你使用的opencv版本)
附加:
在项目设置的链接器部分的“强制符号参考”部分添加__DllMainCRTStartup @ 12。