程序在QT opencv中意外完成



我知道这已经发布了很多次,但我在以前的帖子中找不到解决方案。我从维基Qt学习了如何在Windows上设置Qt和openCV的教程。

我的.pro文件和mainwindows.cpp如下所示。我想按照示例打开图像。这里怎么了?检查了opencv版本,它与包含的libs相同。PATH也是正确的。cpp文件

#include "ui_mainwindow.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
cv::Mat image = cv::imread("C://1.jpg", 1);
cv::namedWindow("My Image");
cv::imshow("My Image", image);
}
MainWindow::~MainWindow()
{
delete ui;
}

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = opencvtest
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += main.cpp
mainwindow.cpp
HEADERS  += mainwindow.h
FORMS    += mainwindow.ui
INCLUDEPATH += C:opencvbuildinclude
LIBS += C:opencv-buildbinlibopencv_core451.dll
LIBS += C:opencv-buildbinlibopencv_highgui451.dll
LIBS += C:opencv-buildbinlibopencv_imgcodecs451.dll
LIBS += C:opencv-buildbinlibopencv_imgproc451.dll
LIBS += C:opencv-buildbinlibopencv_features2d451.dll
LIBS += C:opencv-buildbinlibopencv_calib3d451.dll
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

当程序像Qt Creator下那样崩溃,并且您有额外的库时,很可能的原因是运行时PATH中缺少额外的库。

在这种情况下,您需要将C:opencv-buildbin添加到PATH中。至少有三种方法可以实现。

  1. 编辑系统环境,使相关目录始终位于系统PATH中。您需要重新启动Qt Creator才能使此更改生效。这不是推荐的方式,除非你真的想把这些东西也放在那里用于其他目的。

  2. 您可以在Qt Creator项目视图下编辑项目的构建环境。每个构建类型都有单独的配置,所以您可能需要分别对它们进行配置,这有好有坏。这很好,因为这样你就可以为不同的构建拥有不同的目录(例如debug与relase,MSVC与MinGW构建(。这很糟糕,因为这会带来额外的麻烦,更容易出错。

  3. 您可以在Qt Creator Project视图中将其添加到运行环境中。然后,所有构建类型都是一样的。

在这种情况下,3可能是最好的选择。


Qt Creator令人恼火的是,它没有显示任何关于哪个DLL丢失的信息,只是说程序崩溃了。这可以通过改为字符串"0"来解决;Qt命令提示符";从Windows"开始"菜单中查找正确的工具链(搜索Qt,您应该会找到它(。然后转到builded.exe目录并运行.exe。您现在应该会得到一个错误对话框,Windows告诉您找不到哪个DLL。然后,您可以查看DLL的位置,并将其添加到路径中,然后重试,直到程序启动。使用此方法了解目录后,您可以将它们添加到Qt Creator中,如上所述。

最新更新