当使用HoughLinesP时,Qt中的OpenCV在行向量的重新分配时崩溃

时间:2015-10-16 17:01:39

标签: c++ qt opencv

我已经使用OpenCV 3.0.0已经有一段时间了,并且最近将IDE从Visual Studio 2013切换到Qt Creator 3.4.2。我从源WITH_QT检查了我的OpenCV库。我现在在运行时遇到问题,只有在调试模式下使用HoughLinesP函数时才释放vector<vec4i>

这是我的代码片段:

Mat source(400,400,CV_8U,Scalar(0));
line(source,Point(20,20),Point(300,300),Scalar(255),10);
{
    vector<Vec4i> lines;
    HoughLinesP(source, lines, 1, CV_PI/180, 50, 50, 10 );
    cout << "lines.size() = " << lines.size() << endl;
    cout << "before leaving block" << endl;
}
cout << "after leaving block" << endl;
imshow("source", source);
waitKey();
return 0;

如果我在发布中运行它,那么一切正常,这是我的输出:

  

lines.size()= 13
  在离开区块之前   离开街区后

但是,如果我在调试中运行它,那么我的程序在到达结束块时会崩溃,这是我的输出:

  

lines.size()= 18446744073709306522
  在离开区块之前

如果在调试中我用HoughLinesP注释掉那一行,那么没有崩溃,这是我的输出:

  

lines.size()= 0
  在离开区块之前   离开街区后

这是我的.pro文件:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = OpenCVProject_x64
TEMPLATE = app

INCLUDEPATH += C:\OpenCV3.0.0\opencv\build\include

win32:CONFIG(release, debug|release) {
    LIBS += -LC:\OpenCV3.0.0\opencv\OpenCVLocalBuild_x64\lib\Release \
        -lopencv_calib3d300 -lopencv_core300 -lopencv_features2d300 \
        -lopencv_flann300 -lopencv_hal300 -lopencv_highgui300 \
        -lopencv_imgcodecs300 -lopencv_imgproc300 -lopencv_ml300 \
        -lopencv_objdetect300 -lopencv_photo300 -lopencv_shape300 \
        -lopencv_stitching300 -lopencv_superres300 -lopencv_ts300 \
        -lopencv_video300 -lopencv_videoio300 -lopencv_videostab300
}
win32:CONFIG(debug, debug|release) {
    LIBS += -LC:\OpenCV3.0.0\opencv\OpenCVLocalBuild_x64\lib\Debug \
        -lopencv_calib3d300d -lopencv_core300d -lopencv_features2d300d \
        -lopencv_flann300d -lopencv_hal300d -lopencv_highgui300d \
        -lopencv_imgcodecs300d -lopencv_imgproc300d -lopencv_ml300d \
        -lopencv_objdetect300d -lopencv_photo300d -lopencv_shape300d \
        -lopencv_stitching300d -lopencv_superres300d -lopencv_ts300d \
        -lopencv_video300d -lopencv_videoio300d -lopencv_videostab300d
}

SOURCES += main.cpp

如果您对导致此次崩溃的事情有任何想法,请告诉我。

1 个答案:

答案 0 :(得分:2)

qmake Language: Scope Syntax

  

范围包括条件,后面跟一个左括号   line ,一系列命令和定义,以及一个关闭括号   新行:

<condition> {
    <command or definition>
    ...
} 
     

左括号必须与条件写在同一行。范围可以连接在一起以包含多个   条件,如以下部分所述。

两个库集都添加到LIBSDebug构建的Release变量中,因为范围开口大括号在条件之后写在新行上。

至少Visual Studio 12 Win64OpenCV 3.0似乎DebugRelease库之间存在二元不兼容。

如果应用程序是在Debug模式下使用Release库构建的,则会崩溃,如果它是在Release模式下使用Debug库构建的,它也会崩溃