Windows中QT中的配置OPENCV

Configuration OpenCv in Qt in windows

本文关键字:OPENCV 配置 QT Windows      更新时间:2023-10-16

我正在一个人工视觉项目中工作,这需要用于用户互动的GUI。

寻找一些Posibles解决方案后,我决定使用QT进行编程。

我遵循我发现的一些教程,但是最后我总是有同样的问题:如果我键入一些openCV代码,则该程序在启动后崩溃。

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

出于学习目的,我正在尝试部署以下项目:

  • 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
    
  • main.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: USER VirtualMech Documents opencvButton debug opencvbutton.exe ...

该程序意外完成。

c: users virtualmech documents opencvbutton debug opencvbutton.exe崩溃

这甚至没有开始。

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

现在,如果我仅声明(不定义)a MAT 实例,则应用程序退出运行,并再次显示相同的输出。

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

任何人都可以给任何线索吗?

感谢您的帮助和时间。

我想您忘了将必要的dll放在您要运行的可执行文件旁边,在您的情况下的调试文件夹中。

要找出您缺少哪些DLL,请尝试直接运行程序,而不是通过QT Creator的界面进行操作。