Почему я компилирую один и тот же код в 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

762   1  

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

    Ничего не найдено.