2012-03-02 2 views
1

OpenCV2 - Computer Vision Application Programming 책에 제공된 첫 번째 OpenCV 프로그램을 따라하고 QtCreator를 설정하는 모든 단계를 수행 한 후에도 계속 프로그램을 실행할 수 없습니다. 예상대로 내가 Qt는 창조주 2.4.1을 사용하고OpenCV2.3.1, QtCreator의 기본 프로그램이 작동하지 않습니다.

(Qt는 4.7.4 (64 비트) 기준),이 내 .PRO 파일의 모습입니다 - 여기

QT  += core 

QT  -= gui 

TARGET = myQtConsoleProject 
CONFIG += console 
CONFIG -= app_bundle 

TEMPLATE = app 


SOURCES += main.cpp 

INCLUDEPATH += /usr/local/include 

LIBS += -L/usr/local/lib \ 
-lopencv_core \ 
-lopencv_highgui \ 
-lopencv_imgproc \ 
-lopencv_features2d \ 
-lopencv_calib3d 

프로그램은 다음과 같습니다

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 

int main(int argc, char *argv[]) 
{ 
    // read an image 
    //cv::Mat image = cv::imread("lena.jpg", 1); 
    IplImage* img = cvLoadImage("/home/icarus/Pictures/lena.jpg"); 
    cv::Mat image(img); 
    cvReleaseImage(&img); 

    // create image window named "My Image" 
    cv::namedWindow("My Image"); 

    // show image on window 
    cv::imshow("My Image", image); 

    // wait key for 5000ms 
    cv::waitKey(50000); 


    return 1; 
} 

코드에는 컴파일 오류 또는 경고가 없지만 QtCreator (이 응용 프로그램을 빌드하고 실행해야 함)에서 "실행"버튼을 클릭하면 "qtcreator_process_stub"라는 제목의 터미널 창이 나타납니다. 표시 :

이 버튼을 눌러 창을 닫습니다

...

그러나 내가 기대하는 제목 "내 이미지"로 lena.jpg을 보여주는 OpenCV의 GUI 창입니다. 무슨 일이 일어날 지에 대한 단서가 있습니까? 내가 실행하여 테스트하는 좋은 내장에서 소스 OpenCV의-2.3.1 설치를 가지고 있는지 알고

Starting /home/icarus/Work/MachineVision/Projects/myQtConsoleProject-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Release/myQtConsoleProject... 
/home/icarus/Work/MachineVision/Projects/myQtConsoleProject-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Release/myQtConsoleProject exited with code 0 

참고 : QtCreator 응용 프로그램의 콘솔에서

, 이것은 내가 볼 것입니다 일부 샘플 앱. 또한 .pro 파일에 지정된대로 내 경로가 올바른지 확신합니다.

답변

0

이것이 내가보기에는 문제의 원인이 될지 모르겠지만, 문제라고 생각합니다. 문서에 따르면

http://opencv.willowgarage.com/documentation/cpp/basic_structures.html 다음과 같이 매트에 사용되는 생성자가 정의

을 (또는 링크가 소모 될 경우에는, 검색) :

Mat::Mat(const IplImage* img, bool copyData=false) 

당신은 사용을 :

cv::Mat image(img); 
cvReleaseImage(&img); 

copyData는 기본적으로 false이며 'true'변수를 전달하지 않았기 때문에 Mat가 동일한 메모리를 참조하고 있음을 의미합니다. a s IplImage.

이제 IplImage (img)의 메모리를 표시하기 전에이를 해제해야합니다. 그것은 문제입니다.

보십시오 당신이 이것을 확인하기 위해 이미지를 표시하기 전에

if(! image.data)        // Check for invalid input 
{ 
    cout << "Could not open or find the image" << std::endl ; 
    return -1; 
} 

를 추가.

관련 문제