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

遵循《 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”的终端窗口,该窗口显示:

Press to close this window...



但是我期望的是一个OpenCV GUI窗口,显示标题为“My Image”的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文件中指定的路径是正确的。

最佳答案

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

根据文档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;
}

在显示图像之前进行验证。

https://stackoverflow.com/questions/9538811/

相关文章:

jsf - Primefaces 数据表行编辑器

macos - 将OpenCV集成到OpenGL应用程序中

windows - 如何使用Windows将OpenCV库导入Eclipse

opencv - 哈尔分类器交换

video - OPENCV,无法打开类 VideoWriter

image - OpenCV查找沿线的所有重要边

python - 如何在OpenCV中的python中平均获得2分?

image-processing - 通过直方图评估改善肤色检测

image-processing - 每像素阈值

opencv - findContours 为 "same"图像提供了不同的结果