OpenCV2.3.1,基本程序,在QtCreator中不起作用

时间:2012-03-02 18:54:34

标签: opencv

在OpenCV2 - 计算机视觉应用程序编程书中给出的第一个OpenCV程序之后,按照设置QtCreator的所有步骤,我仍然无法按预期运行程序。

我正在使用Qt Creator 2.4.1(基于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”的终端窗口,显示:

  

按关闭此窗口...

然而,我期望的是一个OpenCV GUI窗口,显示标题为“我的图像”的lena.jpg。关于可能发生的事情的任何线索?

在QtCreator应用程序控制台上,我看到了这一点:

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

请注意,我确信我有一个很好的内置源OpenCV-2.3.1安装,通过运行一些示例应用程序进行测试。另外,我很确定.pro文件中指定的路径是正确的。

1 个答案:

答案 0 :(得分:0)

我不知道这是否是您所看到的行为的正确原因,但我确实认为这是一个问题。

根据文件http://opencv.willowgarage.com/documentation/cpp/basic_structures.html (或者只是搜索它,以防链接失效)

您用于Mat的构造函数定义如下:

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

您使用过:

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

由于默认情况下copyData为false,并且您没有传递'true'变量,这意味着Mat指的是与IplImage相同的内存。

现在你已经在显示它之前释放了IplImage(img)的内存。这是一个问题。

尝试添加

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

显示图像以验证此情况之前。