c++ - Qt Creator 中使用 opencv 的程序意外崩溃

标签 c++ qt opencv qt-creator

我是 Qt 编程和 Opencv 的初学者,我只是想运行一个在窗口中显示图像的基本程序。

我在网上看了很多教程,终于能够毫无错误地安装 Opencv 并将库与 Qt 链接起来。但是当我运行程序时,它意外地完成了,没有显示任何错误。

  • 我在 Debug模式下尝试过,但它只在一秒钟内说“调试已完成”,即使中间有很多断点也是如此。
  • 我还尝试使用 depends 运行该程序以找出缺少的内容,它显示了一些 dll,我尝试下载它并将其放在所需的文件夹中,但它仍然无法正常工作。

这是我的代码片段:

我的 Pro 文件:

    QT       += core gui

    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

    TARGET = opencv2
    TEMPLATE = app


    INCLUDEPATH += C:/opencv/opencv/build/include
    LIBS += -LC:/opencv/opencv/build/x86/vc11/lib

    LIBS +=  -lopencv_core2413d \
     -lopencv_highgui2413d \
     -lopencv_imgproc2413d \
     -lopencv_features2d2413d \
     -lopencv_contrib2413d \
     -lopencv_flann2413d \
     -lopencv_gpu2413d \
     -lopencv_legacy2413d \
     -lopencv_ml2413d \
     -lopencv_nonfree2413d \
     -lopencv_objdetect2413d \
     -lopencv_photo2413d \
     -lopencv_stitching2413d \
     -lopencv_superres2413d \
     -lopencv_ts2413d \
     -lopencv_video2413d \
     -lopencv_videostab2413d \
     -lopencv_calib3d2413d \


    SOURCES += main.cpp\
            mainwindow.cpp

    HEADERS  += mainwindow.h

    FORMS    += mainwindow.ui

我的主窗口.h:

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QMainWindow>

   namespace Ui {
   class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
        Q_OBJECT

    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
        QImage imdisplay;  
        QTimer* Timer;   


    public slots:    
    void DisplayImage();

    private:
        Ui::MainWindow *ui;
    };

    #endif // MAINWINDOW_H

我的 main.cpp:

    #include "mainwindow.h"
    #include <QApplication>

    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();

        return a.exec();
    }

我的主窗口.cpp:

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QTimer>     
    #include "opencv2/imgproc.hpp"
    #include "opencv2/highgui.hpp"
    #include "opencv2/core.hpp"

    using namespace cv;

    MainWindow::MainWindow(QWidget *parent) 
       QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        Timer = new QTimer(this);
        connect(Timer, SIGNAL(timeout()), this, SLOT(DisplayImage()));
        Timer->start(); //Will start the timer
    }

    MainWindow::~MainWindow()
    {
        delete ui;
    }

    void MainWindow::DisplayImage()
    {
        Mat img;
        img = imread("D:\\Kumar\\amazon.jpeg");
        cv::resize(img, img, Size(512, 384), 0, 0, INTER_LINEAR);
        cv::cvtColor(img,img,CV_BGR2RGB);
        QImage imdisplay((uchar*)img.data, img.cols, img.rows, img.step, QImage::Format_RGB888);
        ui->display_image->setPixmap(QPixmap::fromImage(imdisplay));
    }

截图来自:

This lists the dlls that are missing

我在 Path 环境变量中添加的位置是:

C:\opencv\opencv\build\x86\vc11\bin;
C:\Program Files (x86)\Qt\Tools\mingw492_32\bin\;
C:\opencv\opencv\build\bin\;

过去两天我一直在努力解决这个问题,但我完全被困住了。如果有人遇到过同样的问题或者有人知道解决方案,如果你能与我分享,那你就太好了!

编辑:好的,我用像 mvidelgauz 这样的 vc10 工具链重建了 opencv建议,我仍然遇到同样的问题,尽管这次丢失的 dll 有所不同。

This is the new screenshot

还有什么建议吗?

最佳答案

如您的屏幕截图所示,您正在使用 VS2010 编译器 (vc10) 构建您的项目,但您的 opencv 库是使用 vc11 构建的,这使得 C++ 运行时不相容。您要么需要使用 vc11 (VS2012) 构建您的项目,要么使用 vc10 工具链构建 opencv

顺便说一句,如果你使用 Visual,你根本不需要 C:\Program Files (x86)\Qt\Tools\mingw492_32\bin\工作室编译器

关于c++ - Qt Creator 中使用 opencv 的程序意外崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38247701/

相关文章:

c++ - Qt 5 缩放整个窗口

c++ - OpenCV Mat::zeros 未填充 0

c++ - 强制静态成员初始化

c++ - 如何从 C API 在其自己的环境中执行不受信任的 Lua 文件

c++ - 当跨构造函数边界抛出异常时,borland C++ 编译器不会撤消内存分配?

opencv - AndroidStudio中的JavaCV错误java.lang.NoClassDefFoundError:java.lang.ClassNotFoundException:org.bytedeco.javacpp.opencv_core

python - OpenCV 断言失败错误:(-215) scn == 3 ||函数 cv::cvtColor 中的 scn == 4 交替工作

c++ - 使用 QPlainTextEdit 保存到 HTML

c++ - Qt 5.2 : QLocalServer receiving duplicated readyRead signals

c++ - QCharts - 在 QLineSeries 中创建一个中断(空值)