2016-11-23 68 views
0

我正在一个人工视觉项目中工作,这需要用户交互GUI。在Qt窗口中配置OpenCv

寻找一些posibles解决方案后,我决定用Qt编程。

我按照我发现的一些教程,但最后我总是有同样的问题:如果我键入一些opencv代码,程序启动后崩溃。

我正在使用Visual Studio编译器(MSCV 2010 for 32bit)使用opencv 2.4.10和Qt 5.3.2。

对于学习的目的我想部署以下项目:

  • opencvButton.pro:

    QT  += core gui 
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 
    
    TARGET = opencvButton 
    TEMPLATE = app 
    INCLUDEPATH += C:\\opencv\\build\\include 
    LIBS += -LC:\\opencv\\build\\x86\\vc10\\lib \ 
        -lopencv_calib3d2410d \ 
        -lopencv_contrib2410d \ 
        -lopencv_core2410d \ 
        -lopencv_features2d2410d \ 
        -lopencv_flann2410d \ 
        -lopencv_gpu2410d \ 
        -lopencv_highgui2410d \ 
        -lopencv_imgproc2410d \ 
        -lopencv_legacy2410d \ 
        -lopencv_ml2410d \ 
        -lopencv_nonfree2410d \ 
        -lopencv_objdetect2410d \ 
        -lopencv_ocl2410d \ 
        -lopencv_photo2410d \ 
        -lopencv_stitching2410d \ 
        -lopencv_superres2410d \ 
        -lopencv_ts2410d \ 
        -lopencv_video2410d \ 
        -lopencv_videostab2410d 
    
    
    SOURCES += main.cpp\ 
        mainwindow.cpp 
    
    HEADERS += mainwindow.h 
    
    FORMS += mainwindow.ui 
    
  • mainwindow.h:

    #ifndef MAINWINDOW_H 
    #define MAINWINDOW_H 
    
    #include <QMainWindow> 
    #include <QPushButton> 
    #include <QMessageBox> 
    #include <opencv2/opencv.hpp> 
    #include <opencv2/core/core.hpp> 
    #include <opencv2/highgui/highgui.hpp> 
    #include <opencv2/imgproc/imgproc.hpp> 
    
    namespace Ui { 
        class MainWindow; 
    } 
    
    class MainWindow : public QMainWindow 
    { 
        Q_OBJECT 
    public: 
        explicit MainWindow(QWidget *parent = 0); 
        private slots: 
        void handleButton(); 
    private: 
        QPushButton *m_button; 
    }; 
    
    #endif // MAINWINDOW_H 
    
  • 为主。 cpp:

    #include "mainwindow.h" 
    
    #include <QApplication> 
    
    int main(int argc, char *argv[]) 
    { 
        QApplication app(argc, argv); 
    
        MainWindow mainWindow; 
        mainWindow.showMaximized(); 
        return app.exec(); 
    } 
    
  • 最后,mainwindow.cpp: 的#include “mainwindow.h”

    #include <QCoreApplication> 
    
    using namespace cv; 
    
    MainWindow::MainWindow(QWidget *parent) 
        : QMainWindow(parent) 
    { 
        // Create the button, make "this" the parent 
        m_button = new QPushButton("Display image", this); 
        // set size and location of the button 
        m_button->setGeometry(QRect(QPoint(100, 100), QSize(200, 50))); 
    
        // Connect button signal to appropriate slot 
        connect(m_button, SIGNAL (released()), this, SLOT (handleButton())); 
    } 
    
    void MainWindow::handleButton() 
    { 
        // Define image path 
        String imaloc = "C:\\Users\\Virtualmech\\Desktop\\ipRedCable.png"; 
        // Mat instance declaration image. 
        Mat image; 
        // Load imaloc image in Mat instance. 
        image = imread(imaloc); 
        if(image.empty()){ 
         QMessageBox::about(this, "Error", "Cannot load image"); 
        }else{ 
         // Declare name of window 
         namedWindow("Display image"); 
         // Show image 
         imshow("Display image", image); 
         // Wait for user interaction 
         waitKey(0); 
         // Close and destroy window 
         destroyAllWindows(); 
        } 
    } 
    

该项目包括在一个单一的按钮,当你点击它,程序应该显示的图像在路径imaloc。

应用输出我得到的是:

开始C:\用户\ Virtualmech \文档\ opencvButton \调试\ opencvButton.exe ...

该方案已完成意外。

C:\用户\ Virtualmech \文档\ opencvButton \调试\ opencvButton.exe坠毁

而且,甚至没有开始。

如果我在mainwindow.cpp中评论opencv相关的代码,程序运行完美。

现在,如果我只是声明(不定义)Mat实例,应用程序将停止运行,并再次显示相同的输出。

我认为它必须是一个配置问题,但我找不到它。

任何人都可以提供任何线索吗?

感谢您的帮助和时间。

回答

3

我想你忘了把你需要运行的可执行文件放在你的案例的debug文件夹中。

要找出你丢失了哪些dll,请尝试直接运行该程序,而不是通过Qt Creator的界面进行操作。

+0

感谢您的回答。我认为通过输入**。pro **文件行的** INCLUDEPATH **(对于.h)和** LIBS **(对于.lib)就足够了。现在我明白我必须链接**。dlls **了。我将尝试包含这些文件并发布反馈。 –

+0

非常感谢。你是绝对正确的。我只是复制到我的项目文件夹** .DLL **文件与我的**。lib **文件和项目运行完美:)) –