Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ windows下Qt中OpenCv的配置_C++_Qt_Opencv_Qt Creator - Fatal编程技术网

C++ windows下Qt中OpenCv的配置

C++ windows下Qt中OpenCv的配置,c++,qt,opencv,qt-creator,C++,Qt,Opencv,Qt Creator,我在一个人工视觉项目中工作,该项目需要一个用于用户交互的GUI 在寻找了一些可行的解决方案之后,我决定用Qt编程 我遵循我找到的一些教程,但最后我总是遇到同样的问题:如果我键入一些opencv代码,程序启动后就会崩溃 我正在使用opencv 2.4.10和Qt 5.3.2以及Visual Studio编译器(32位的MSCV 2010) 出于学习目的,我尝试部署以下项目: opencvButton.pro: QT += core gui greaterThan(QT_MAJOR_

我在一个人工视觉项目中工作,该项目需要一个用于用户交互的GUI

在寻找了一些可行的解决方案之后,我决定用Qt编程

我遵循我找到的一些教程,但最后我总是遇到同样的问题:如果我键入一些opencv代码,程序启动后就会崩溃

我正在使用opencv 2.4.10和Qt 5.3.2以及Visual Studio编译器(32位的MSCV 2010)

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

  • 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
    
    \ifndef主窗口
    #定义主窗口
    #包括
    #包括
    #包括
    #包括
    #包括
    #包括
    #包括
    名称空间用户界面{
    类主窗口;
    }
    类主窗口:公共QMainWindow
    {
    Q_对象
    公众:
    显式主窗口(QWidget*parent=0);
    专用插槽:
    无效把手按钮();
    私人:
    QPushButton*m_按钮;
    };
    #endif//main窗口
    
  • 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.h”
    #包括
    int main(int argc,char*argv[])
    {
    QApplication应用程序(argc、argv);
    主窗口主窗口;
    mainWindow.showMaximized();
    返回app.exec();
    }
    
  • 最后,mainwindow.cpp: #包括“mainwindow.h”

    #包括
    使用名称空间cv;
    主窗口::主窗口(QWidget*父窗口)
    :QMainWindow(父级)
    {
    //创建按钮,使“this”成为父级
    m_按钮=新的QPushButton(“显示图像”,此按钮);
    //设置按钮的大小和位置
    m_按钮->设置几何体(QRect(QPoint(100100),QSize(20050));
    //将按钮信号连接到适当的插槽
    连接(m_按钮,信号(释放()),此,插槽(把手按钮());
    }
    void主窗口::把手按钮()
    {
    //定义图像路径
    String imaloc=“C:\\Users\\virtualtech\\Desktop\\ipRedCable.png”;
    //Mat实例声明图像。
    Mat图像;
    //在Mat实例中加载imaloc图像。
    图像=imread(imaloc);
    if(image.empty()){
    QMessageBox::about(这是“错误”,“无法加载图像”);
    }否则{
    //声明窗口的名称
    namedWindow(“显示图像”);
    //显示图像
    imshow(“显示图像”,图像);
    //等待用户交互
    等待键(0);
    //关闭并销毁窗口
    销毁所有窗口();
    }
    }
    
此项目包含一个按钮,当您单击它时,程序应在路径imaloc中显示一个图像

我得到的应用程序输出是:

正在启动C:\Users\VirtualTech\Documents\opencvButton\debug\opencvButton.exe

程序意外地完成了

C:\Users\VirtualTech\Documents\opencvButton\debug\opencvButton.exe崩溃

这甚至没有开始

如果我在mainwindow.cpp中注释与opencv相关的代码,则该程序运行良好

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

我想这一定是配置问题,但我找不到

有人能提供线索吗


感谢您的帮助和时间。

我想您忘了将必要的DLL放在您要运行的可执行文件旁边,放在您案例的debug文件夹中


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

我认为您忘记将必要的DLL放在要运行的可执行文件旁边,放在案例中的调试文件夹中


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

谢谢您的回答。我认为输入INCLUDEPATH(for.h)和LIBS(for.lib)的.pro文件行就足够了。现在我明白了我也必须链接.dll。我将尝试包括这些文件并发布反馈。非常感谢。你完全正确。我只需将与.lib文件相关的.dll文件复制到我的项目文件夹中,项目即可完美运行:))谢谢您的回答。我认为输入INCLUDEPATH(for.h)和LIBS(for.lib)的.pro文件行就足够了。现在我明白了我也必须链接.dll。我将尝试包括这些文件并发布反馈。非常感谢。你完全正确。我只需将与.lib文件相关的.dll文件复制到我的项目文件夹中,项目即可完美运行:)
 #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();
    }
}