2012-03-02 7 views
1

OpenCV2 - Computer Visionアプリケーションプログラミングの書籍で紹介された最初のOpenCVプログラムに続いて、QtCreatorをセットアップするためのすべての手順を実行しても、予想通り。私は(Qtの4.7.4(64ビット)に基づいて)のQt Creatorを2.4.1を使用しています、これは私の.PROファイルは次のようになりますQtCreatorでOpenCV2.3.1の基本プログラムが動作しない

-

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画面です。何が起こっているのかについての手がかりは? QtCreatorアプリケーションコンソールで

、これは私が見たものである:私は、組み込みのソースを実行してテストされて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 

注意いくつかのサンプルアプリ。また、.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で、「真の」変数を渡さなかったため、Matは同じメモリを参照していますIplImage。

これで、IplImage(img)のメモリが表示されるようになりました。それは問題です。あなたはこれを確認するために画像を表示する前に

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

を追加

してみてください。

関連する問題