Почему я компилирую один и тот же код в Visual Studio и Qt, но получаю разные результаты?
Вот в чем дело. Я переписывал свой код OpenCV на Qt framework в эти дни, и код хорошо работает на Visual Studio 2013, но когда я запускаю его на Qt, происходит что-то странное.
Чтобы упростить задачу, я пишу другой код для проведения эксперимента, и, как и следовало ожидать, проблема все еще остается.
Вот код,
#include <iostream>
#include <highgui.hpp>
#include <core.hpp>
#include <cv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat view, viewGray;
vector<Point2f> pointBuf;
Size boardSize;
boardSize.width = 7; boardSize.height = 9;
view = imread("G:\C++\OpenCV\OpenCV\left1.jpg", 1);
cout << pointBuf.size() << endl;
cout << boardSize << endl;
cvtColor(view, viewGray, COLOR_BGR2GRAY);
bool found = findChessboardCorners(view, boardSize, pointBuf,
CV_CALIB_CB_ADAPTIVE_THRESH |
CV_CALIB_CB_FAST_CHECK |
CV_CALIB_CB_NORMALIZE_IMAGE);
cout << pointBuf.size() << endl;
cout << found << endl;
namedWindow("show", CV_WINDOW_NORMAL);
imshow("show", view);
waitKey(0);
return 0;
}
Когда я запускаю его в Visual Studio, все в порядке. Результаты отладки выглядят следующим образом.
Отладочная информация на VS2013:
Размер pointBuf перед строкой bool found = findChessboardCorners(...) равен 0 , а затем он превращается в 63 после этой строки.
Но когда я запускаю его на Qt, результат отладки превращается в очень смешной,
Код перед namedWindow("show", CV_WINDOW_NORMAL); запускается без предупреждения, но получает другой результат, размер pointBuf перед строкой bool found = findChessboardCorners(...) также равен 0, но он превращается в очень большое число после этой строки, которое равно 4294044375.
Но после namedWindow("show", CV_WINDOW_NORMAL); возникает другая проблема,
:-1: error: Exception at 0x778a768b, code: 0xc0000005: read access violation at: 0x0, flags=0x0 (first chance)
И вся отладочная информация выглядит следующим образом,
Отладочная информация на Qt:
ОС: windows 10 64-разрядная
Qt Vision: Qt5. 6. 0 с MSVC 2013
Visual Studio Vision: Visual Studio 2013.
OpenCV Vision: OpenCV3. 0
Update: я ввел некоторые переменные, и проблема все еще существует.

Update 2: @Miki думает, что я использую неправильные библиотеки OpenCV, (например, используя debug libs в release), поэтому я даю всю свою информацию о конфигурации следующим образом, надеюсь, что кто-то может сделать мне одолжение.
QT += core
QT -= gui
CONFIG += c++11
TARGET = testApp
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
INCLUDEPATH +=F:opencvbuildinclude
F:opencvbuildincludeopencv
F:opencvbuildincludeopencv2
LIBS +=F:opencvbuildx86vc12libopencv_ts300.lib
F:opencvbuildx86vc12libopencv_ts300d.lib
F:opencvbuildx86vc12libopencv_world300.lib
F:opencvbuildx86vc12libopencv_world300d.lib
Update3: я повторно компилирую библиотеки opencv, а затем делаю тот же Тест, что и выше, на этот раз я получаю размер pointBuf 1638, а не 4294044375. Поэтому я уверен, что проблема исходит от самого OpenCV.
Update4: ну, эту проблему я решил сам. Я изменил OpenCV vision с 3.0 на 2.4.12, после чего весь мир успокоился. Так Что Я был прав, проблема исходит от самого opencv.
Update5: @Miki был прав,я использовал неправильные библиотеки. Я забыл очистить проект сначала вчера, вот почему я сделал то, что сказал мне @Miki, но это не сработало. Thx @Miki
1 ответ:
Ну, я сожалею, что не добавил ответ сразу же, когда у меня было решение.
Проблема возникает из-за неправильного использования между debug libs и release libs.
Вот правильная конфигурация,
И наконец, я очень благодарен всем вам за помощь, ребята, и это самое теплое сообщество, в котором я когда-либо был. ТХ-х, все.CONFIG(debug, debug|release) { LIBS +=F:\opencv30\build\x86\vc12\lib\opencv_ts300d.lib \ F:\opencv30\build\x86\vc12\lib\opencv_world300d.lib } CONFIG(release, debug|release) { LIBS +=F:\opencv30\build\x86\vc12\lib\opencv_ts300.lib \ F:\opencv30\build\x86\vc12\lib\opencv_world300.lib }



Comments