我试图在Qt中创建一个简单的Opencv应用程序,并且在运行时整个应用程序崩溃了。如果我从项目中注释掉与opencv相关的代码,则该项目运行正常。

我做了什么:

Downloaded the Qt 5.5.0 VS2013 64bit version
Downloaded the OpenCV 3.0
Downloaded the Cmake 3.3.2

当我提取Opencv软件包时,已经有了预编译的二进制文件,但是网上的所有教程都希望我重新编译源代码,我也是如此。该软件包包含:
build
sources

创建了一个名为mymade的新文件夹,以将二进制文件保存在其他两个目录旁边。所以现在看起来像这样:
 build
 mymade
 sources

脚步:
  • 启动CMake,从提取的文件中指定源文件夹
    并指定mymade作为二进制文件的输出。
  • 检查了名称中带有opencv的所有选项以及Qt!并对其进行配置,随后生成文件。

  • 这是结果内容:

    c++ - Qt中的Opencv示例立即崩溃,错误为 'The program has unexpectedly finished'-LMLPHP

    一切都完成了,现在我需要构建二进制文件。我打开OpenCV.sln并编译了发行和调试二进制文件。 dll放在bin目录中,而lib文件放在lib文件夹中。

    现在是时候配置Qt项目的.pro文件了,所以我使用了build目录中的头文件,对于libs,我使用了mymade文件夹中的lib文件夹。这是我想到的第一个配置,可以在没有任何链接程序问题的情况下进行编译,但是会立即崩溃。

    项目文件中的初始更改:
    #-------------------------------------------------
    #
    # Project created by QtCreator 2015-10-06T14:04:20
    #
    #-------------------------------------------------
    
    QT       += core gui
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = OpenCVTest
    TEMPLATE = app
    
    SOURCES += main.cpp\
            mainwindow.cpp
    
    HEADERS  += mainwindow.h
    
    
    INCLUDEPATH += L://Apps_Installation_Folder//opencv//build//include
    LIBS += L://Apps_Installation_Folder//opencv//mymade//lib//Release//*.lib
    
    FORMS    += mainwindow.ui
    

    按照this之类的答案建议在项目文件中执行此操作也没有任何好处:
    #-------------------------------------------------
    #
    # Project created by QtCreator 2015-10-06T14:04:20
    #
    #-------------------------------------------------
    
    QT       += core gui
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = OpenCVTest
    TEMPLATE = app
    
    SOURCES += main.cpp\
            mainwindow.cpp
    
    HEADERS  += mainwindow.h
    
    
    INCLUDEPATH += L://Apps_Installation_Folder//opencv//build//include
    
    LIBS += L://Apps_Installation_Folder//opencv//mymade//lib//Release//opencv_core300.lib
    LIBS += L://Apps_Installation_Folder//opencv//mymade//lib//Release//opencv_highgui300.lib
    LIBS += L://Apps_Installation_Folder//opencv//mymade//lib//Release//opencv_imgcodecs300.lib
    LIBS += L://Apps_Installation_Folder//opencv//mymade//lib//Release//opencv_ml300.lib
    LIBS += L://Apps_Installation_Folder//opencv//mymade//lib//Release//opencv_objdetect300.lib
    LIBS += L://Apps_Installation_Folder//opencv//mymade//lib//Release//opencv_photo300.lib
    LIBS += L://Apps_Installation_Folder//opencv//mymade//lib//Release//opencv_shape300.lib
    LIBS += L://Apps_Installation_Folder//opencv//mymade//lib//Release//opencv_hal300.lib
    LIBS += L://Apps_Installation_Folder//opencv//mymade//lib//Release//opencv_flann300.lib
    LIBS += L://Apps_Installation_Folder//opencv//mymade//lib//Release//opencv_features2d300.lib
    
    FORMS    += mainwindow.ui
    

    这也会失败:
    #-------------------------------------------------
    #
    # Project created by QtCreator 2015-10-06T14:04:20
    #
    #-------------------------------------------------
    
    QT       += core gui
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = OpenCVTest
    TEMPLATE = app
    
    SOURCES += main.cpp\
            mainwindow.cpp
    
    HEADERS  += mainwindow.h
    
    
    INCLUDEPATH += L://Apps_Installation_Folder//opencv//build//include
    
    LIBS +=-L"L://Apps_Installation_Folder//opencv//mymade//lib//Release"
    LIBS += -lopencv_core300 -lopencv_highgui300 -lopencv_imgcodecs300 -lopencv_ml300 -lopencv_objdetect300 -lopencv_photo300 -lopencv_hal300 -lopencv_shape300 -lopencv_flann300 -lopencv_features2d300
    
    
    FORMS    += mainwindow.ui
    

    那么这是什么问题呢?

    更新资料

    正如@Miki指出的,Qt找不到opencv dll(上面的配置还可以,但是),要解决此问题,只需要将包含dll的目录添加到PATH变量中,就可以了。去,现在一切都会好起来的。

    最佳答案

    从评论到问题,事实证明该程序未找到OpenCV dll。

    您可以:

  • 将所需的dll复制到.exe的同一文件夹中
  • 将包含dll的文件夹添加到PATH。您需要重新启动Qt Creator才能使更改生效。
  • 09-10 06:29
    查看更多