4 votes

Le programme s'est inopinément terminé en QT opencv

Je sais que cette question a été posée à plusieurs reprises, mais je n'ai pas trouvé la solution dans les messages précédents. J'ai suivi le tutoriel "Comment installer Qt et openCV sous Windows" du wiki Qt.

Mon .pro et mainwindows.cpp sont présentés ci-dessous. Je voulais ouvrir l'image en suivant l'exemple. Quel est le problème ici ? J'ai vérifié la version d'opencv et c'est la même que celle des librairies incluses. Le site PATH est également correct. Le fichier 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;
}

et

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:\opencv\build\include
LIBS += C:\opencv-build\bin\libopencv_core451.dll
LIBS += C:\opencv-build\bin\libopencv_highgui451.dll
LIBS += C:\opencv-build\bin\libopencv_imgcodecs451.dll
LIBS += C:\opencv-build\bin\libopencv_imgproc451.dll
LIBS += C:\opencv-build\bin\libopencv_features2d451.dll
LIBS += C:\opencv-build\bin\libopencv_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

1voto

hyde Points 13720

Lorsqu'un programme plante comme cela sous Qt Creator, et que vous avez des bibliothèques supplémentaires, la raison la plus probable est que les bibliothèques supplémentaires sont manquantes dans le runtime. PATH .

Dans ce cas, vous devez ajouter C:\opencv-build\bin à la PATH. Il y a au moins 3 façons de procéder.

  1. Modifier l'environnement du système, de sorte que le répertoire pertinent se trouve toujours dans le système. PATH . Vous devez redémarrer Qt Creator pour que ce changement prenne effet. Ce n'est pas la méthode recommandée, à moins que vous ne souhaitiez que ces éléments soient présents pour d'autres raisons.

  2. Vous pouvez modifier l'environnement de construction du projet dans la vue du projet Qt Creator. Il y a une configuration séparée pour chaque type de construction, donc vous pouvez avoir besoin de faire cela pour eux tous séparément, ce qui est à la fois bon et mauvais. C'est bien, parce que vous pouvez alors avoir un répertoire différent pour les différentes constructions (par exemple debug vs relase, MSVC vs MinGW builds). C'est mauvais parce que c'est un problème supplémentaire et qu'il est plus facile d'avoir quelque chose de faux.

  3. Vous pouvez l'ajouter à l'environnement d'exécution dans la vue du projet Qt Creator. Il sera alors le même pour tous les types de construction.

Dans ce cas, 3 est probablement la solution.


Qt Creator n'affiche pas d'informations sur la DLL manquante, il indique simplement que le programme s'est écrasé. Pour résoudre ce problème, il suffit de lancer l'"invite de commande Qt" pour la chaîne d'outils appropriée à partir du menu Démarrer de Windows (recherchez Qt et vous devriez la trouver). Ensuite, allez dans le répertoire .exe construit et exécutez le .exe. Vous devriez maintenant obtenir un dialogue d'erreur dans lequel Windows vous indique quelle DLL il n'a pas réussi à trouver. Vous pouvez alors chercher où se trouve cette DLL, l'ajouter au chemin et réessayer, jusqu'à ce que le programme démarre. Une fois que vous connaissez les répertoires en utilisant cette méthode, vous pouvez les ajouter à Qt Creator comme expliqué ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X