我已经使用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
如果您对导致此次崩溃的事情有任何想法,请告诉我。
答案 0 :(得分:2)
范围包括条件,后面跟一个左括号 line ,一系列命令和定义,以及一个关闭括号 新行:
<condition> { <command or definition> ... }
左括号必须与条件写在同一行。范围可以连接在一起以包含多个 条件,如以下部分所述。
两个库集都添加到LIBS
和Debug
构建的Release
变量中,因为范围开口大括号在条件之后写在新行上。
至少Visual Studio 12 Win64
和OpenCV 3.0
似乎Debug
和Release
库之间存在二元不兼容。
如果应用程序是在Debug
模式下使用Release
库构建的,则会崩溃,如果它是在Release
模式下使用Debug
库构建的,它也会崩溃