使用 HoughLinesP 时,Qt 中的 OpenCV 因线向量释放而崩溃

2024-01-07

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

这是我的代码片段:

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;

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

线数.size() = 13
离开街区之前
离开街区后

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

线数.size() = 18446744073709306522
离开街区之前

如果在调试中并用 HoughLinesP 注释掉该行,则不会发生崩溃,这是我的输出:

线数.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

如果您对导致这次崩溃的原因有任何想法,请告诉我。


qmake 语言:作用域语法 http://doc.qt.io/qt-5/qmake-language.html#scope-syntax:

范围由一个条件组成后跟一个左大括号 线、一系列命令和定义以及右大括号 新队:

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

左大括号必须与条件写在同一行。范围可以串联起来以包含多个 条件,如以下各节所述。

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

看来至少对于Visual Studio 12 Win64 and OpenCV 3.0之间存在二进制不兼容性Debug and Release图书馆。

如果应用程序内置于Debug模式与Release库它会崩溃,如果它是内置的Release模式与Debug库它也会崩溃。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 HoughLinesP 时,Qt 中的 OpenCV 因线向量释放而崩溃 的相关文章

随机推荐