PDA

View Full Version : OpenCV cvSmooth not working in Qt, but OK in Visual C++ 2008



aoikyou
18th March 2012, 04:04
I am using Qt with OpenCV 2.3.1 (Qt version: Qt 4.8.0 for Desktop - MSVC2008, Tool Chain: Visual C++ Compiler 9.0 (x86)).
I am trying to run a simple tutorial example:



#include <QtGui/QApplication>
#include <cv.h>
#include <highgui.h>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

IplImage* img = 0;
img=cvLoadImage("angrybird.jpg");

// create a window
cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
cvMoveWindow("mainWin", 100, 100);

// show the image
cvShowImage("mainWin", img );


//cvWaitKey(0);
IplImage* img2 = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
cvSmooth( img, img2, CV_GAUSSIAN, 3, 3 );
cvNamedWindow("Smooth", CV_WINDOW_AUTOSIZE);
cvMoveWindow("Smooth", 200, 200);
cvShowImage("Smooth", img2 );
cvWaitKey(0);

// release the image
cvReleaseImage(&img );
cvReleaseImage(&img2 );
return a.exec();
}


When I run it, I got the error message:


The program has unexpectedly finished.
... exited with code -1073741515


The code run fine though if I comment out the cvSmooth() line.

I believe I have the correct .pro file


#-------------------------------------------------
#
# Project created by QtCreator 2012-02-13T22:03:03
#
#-------------------------------------------------

QT += core gui

TARGET = QImageJpegTest1
TEMPLATE = app


SOURCES += main.cpp

INCLUDEPATH += C:\OpenCV\opencv\build\include\opencv
INCLUDEPATH += C:\OpenCV\opencv\build\include\opencv2
INCLUDEPATH += C:\OpenCV\opencv\modules\core\include
INCLUDEPATH += C:\OpenCV\opencv\modules\features2d\include
INCLUDEPATH += C:\OpenCV\opencv\modules\flann\include
INCLUDEPATH += C:\OpenCV\opencv\modules\legacy\include
INCLUDEPATH += C:\OpenCV\opencv\modules\imgproc\include
INCLUDEPATH += C:\OpenCV\opencv\modules\video\include
INCLUDEPATH += C:\OpenCV\opencv\modules\calib3d\include
INCLUDEPATH += C:\OpenCV\opencv\modules\gpu\include
INCLUDEPATH += C:\OpenCV\opencv\modules\contrib\include
INCLUDEPATH += C:\OpenCV\opencv\modules\haartraining\include
INCLUDEPATH += C:\OpenCV\opencv\modules\highgui\include
INCLUDEPATH += C:\OpenCV\opencv\modules\java\include
INCLUDEPATH += C:\OpenCV\opencv\modules\ml\include
INCLUDEPATH += C:\OpenCV\opencv\modules\objdetect\include
INCLUDEPATH += C:\OpenCV\opencv\modules\python\include
INCLUDEPATH += C:\OpenCV\opencv\modules\stitching\include
INCLUDEPATH += C:\OpenCV\opencv\modules\traincascade\include
INCLUDEPATH += C:\OpenCV\opencv\modules\ts\include
INCLUDEPATH += C:\OpenCV\opencv\modules\androidcamera\include
INCLUDEPATH += $$PWD/../../../../../OpenCV/opencv/build/x86/vc9
DEPENDPATH += $$PWD/../../../../../OpenCV/opencv/build/x86/vc9


win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_contrib231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_contrib231d
else:symbian: LIBS += -lopencv_contrib231
else:unix: LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_contrib231

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_core231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_core231d
else:symbian: LIBS += -lopencv_core231
else:unix: LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_core231

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_calib3d231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_calib3d231d
else:symbian: LIBS += -lopencv_calib3d231
else:unix: LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_calib3d231

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_flann231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_flann231d
else:symbian: LIBS += -lopencv_flann231
else:unix: LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_flann231

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_imgproc231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_imgproc231d
else:symbian: LIBS += -lopencv_imgproc231
else:unix: LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_imgproc231

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_features2d231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_features2d231d
else:symbian: LIBS += -lopencv_features2d231
else:unix: LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_features2d231

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_gpu231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_gpu231d
else:symbian: LIBS += -lopencv_gpu231
else:unix: LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_gpu231

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_haartraining_engine
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_haartraining_engined
else:symbian: LIBS += -lopencv_haartraining_engine
else:unix: LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_haartraining_engine

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_highgui231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_highgui231d
else:symbian: LIBS += -lopencv_highgui231
else:unix: LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_highgui231

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_legacy231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_legacy231d
else:symbian: LIBS += -lopencv_legacy231
else:unix: LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_legacy231

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_video231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_video231d
else:symbian: LIBS += -lopencv_video231
else:unix: LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_video231

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_ts231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_ts231d
else:symbian: LIBS += -lopencv_ts231
else:unix: LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_ts231

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_ts231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_ts231d
else:symbian: LIBS += -lopencv_ts231
else:unix: LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_ts231

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_objdetect231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_objdetect231d
else:symbian: LIBS += -lopencv_objdetect231
else:unix: LIBS += -L$$PWD/../../../../../OpenCV/opencv/build/x86/vc9/lib/ -lopencv_objdetect231


I was thinking it might be due to missing dll. But when I test the same code in Visual Studio 2008, it works fine with cvSmooth() there and smooth the image as it suppose to do. If it is a dll problem, VC++ code shouldn't work either, isn't it?
Here is the VC++ code:



// testOpenCV.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <math.h>
#include <cv.h>
#include <highgui.h>

int _tmain(int argc, _TCHAR* argv[])
{
IplImage* img = 0;
img=cvLoadImage("angrybird.jpg");

// create a window
cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
cvMoveWindow("mainWin", 100, 100);
// show the image
cvShowImage("mainWin", img );

//cvWaitKey(0);

IplImage* img2 = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
cvSmooth( img, img2, CV_GAUSSIAN, 3, 3 );
cvNamedWindow("Smooth", CV_WINDOW_AUTOSIZE);
cvMoveWindow("Smooth", 200, 200);
cvShowImage("Smooth", img2 );
cvWaitKey(0);
// release the image
cvReleaseImage(&img );
cvReleaseImage(&img2 );
return 0;
}



I am now run out of idea where to look for the problem. I will appreciate if anyone can point me to a new direction.
Thanks.

aoikyou
20th March 2012, 19:35
BTW, I tried the same thing on two machines, one is a desktop at work and another is a laptop, both running Windows 7. Got the same result on both machines: VC++ version runs fine, the Qt one is not working.

Anyone has experienced similar problem before?

I would really appreciate if someone try the Qt code above and see if they got the same problem. Thanks.

pumper
30th March 2012, 10:00
hi
did you found any answer ?

aoikyou
31st March 2012, 04:21
No. For now, I switch back to VC++ and am not using Qt for anything OpenCV. I still wish I could use Qt though.
Did you try using cvSmooth in Qt and got similar problem?