Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt : 5.10.0 - Qt Creator : 4.5.0 - Qt Installer : 3.0.2 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

exécution code source QT 5.2 et opencv 3.1 en mode static sous windows

May 2016 modifié dans OpenCV
Bonjour,
je suis débutant en QT, et je souhaite générer une application static en utilisant Opencv.
Depuis quelques jours je bloque sur un point, dès que je fait appel à des fonctions OpenCV

En fait, j'ai déjà généré QT 5.2 en mode static, et opencv 3.1 en mode static également en utilisant Mingw32.
J'arrive à générer une application qt.exe, en faisant appel à opencv, voire même exportable sur d'autres pc.
Dès que j'ajoute imread, le code ne compile plus.
voici mes fichiers..


files.pro

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = sans_titre4
TEMPLATE = app

message("* Using settings for Windows moez.")
INCLUDEPATH += "C:\\OOpenCV\\buildQT6\\install\\include" \
"C:\\OOpenCV\\buildQT3\\install\\include\\opencv" \
"C:\\OOpenCV\\buildQT3\\install\\include\\opencv2"


LIBS += -LC:\\OOpenCV\\buildQT6\\install\\x86\\mingw\\staticlib\
-lIlmImf \
-llibjasper \
-llibjpeg \
-llibpng \
-llibtiff \
-llibwebp \
-lzlib \
-lopencv_calib3d310 \
-lopencv_core310 \
-lopencv_features2d310 \
-lopencv_flann310\
-lopencv_highgui310 \
-lopencv_imgcodecs310 \
-lopencv_imgproc310 \
-lopencv_ml310 \
-lopencv_objdetect310 \
-lopencv_photo310 \
-lopencv_shape310 \
-lopencv_stitching310 \
-lopencv_superres310 \
-lopencv_ts310 \
-lopencv_video310 \
-lopencv_videoio310 \
-lopencv_videostab310 \


SOURCES += main.cpp\
mainwindow.cpp

HEADERS += mainwindow.h

FORMS += mainwindow.ui
main.cpp


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

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

return a.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private slots:
void on_pushButton_clicked();

private:
Ui::MainWindow *ui;
cv::Mat m_zero ;
};

#endif // MAINWINDOW_H
mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QFileDialog>
#include <QMessageBox>

#include <cv.h>


MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

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

void MainWindow::on_pushButton_clicked()
{
m_zero = cv::Mat::zeros(10, 20, CV_32F);

// Display dialog so the user can select a file
QString filename = QFileDialog::getOpenFileName(this,
tr("Open Image"),
QDir::currentPath(),
tr("Files (*.png *.jpg *.tiff *.bmp)"));

if (filename.isEmpty()) // Do nothing if filename is empty
return;


int Height = m_zero.size().height;
QString::number(Height);

qDebug() << Height ;
QString Height_Qstring = QString::number(Height);

m_zero = cv::imread("CSC_0113.JPG", CV_LOAD_IMAGE_COLOR);
m_zero = cv::imread(filename.toStdString(), CV_LOAD_IMAGE_COLOR);

QMessageBox msgBox;
msgBox.setText(Height_Qstring + " " + filename);
msgBox.exec();


}
L’exécution de ce code génère ces erreurs.
image

grfmt_webp.cpp:-1: erreur&nbsp;: undefined reference to `WebPGetFeaturesInternal'
grfmt_webp.cpp:-1: erreur&nbsp;: undefined reference to `WebPDecodeBGRInto'
:-1: erreur&nbsp;: C:\OOpenCV\buildQT6\install\x86\mingw\staticlib\libopencv_imgcodecs310.a(grfmt_webp.cpp.obj): bad reloc address 0x130 in section `.text$_ZN2cv11WebPDecoder8readDataERNS_3MatE'
:-1: erreur&nbsp;: final link failed: Invalid operation
collect2.exe:-1: erreur&nbsp;: error: ld returned 1 exit status
Si je commente ces deux lignes
 
m = cv::imread("CSC_0113.JPG", CV_LOAD_IMAGE_COLOR);
m = cv::imread(filename.toStdString(), CV_LOAD_IMAGE_COLOR);
Le code fonctionne, le msgBox affiche le height de la matrice m_zero

J'ai fait plusieurs recherches et je ne trouve pas de solution.
Le code source complet est en PJ.

Cordialement
rar
rar
sans_titre4.rar
6K

Réponses

  • May 2016 modifié
    Dans le cas ou j'utilise opencv en mode non static library, j'ai cette erreur. et le file.exe n s'exécute pas
    "Le programme s'est terminé subitement." 
  • May 2016 modifié
    Bonsoir,

    As-tu essayé de linker avec seulement le minimum vital,
    genre opencv_core et opencv_highgui juste pour tester la fonction imread.
    Qu'est-ce que veut dire buildQT6 et buildQT3 dans les chemins ?

    le "undefined reference to WebPGetFeaturesInternal" voudrait dire qu'il te manque une lib (webP)

    Dans le .pro, plutôt une syntaxe comme ceci :

    INCLUDEPATH += C:/OOpenCV/buildQT6/install/include
    LIBS += -LC:/OOpenCV/buildQT6/install/x86/mingw/staticlib \
    -lopencv_calib3d310 \
    -lopencv_core310
  • Bonsoir,

    Merci pour votre réponse.
    buildQT6 et buildQT3 -> erreur de frappe, je l'ai corrigé depuis ce matin et sans succès.

    Je viens de tester avec seulement opencv_core et opencv_highgui
    J'ai cette erreur
    undefined reference to `cv::imread(cv::String const&, int)'
    En fait, depuis la version 3.0 d'OpenCV, pour utiliser imread faudra linker le lopencv_imgcodecs310 et lopencv_imgproc310
    Et là J'ai le même message erreur initial

    Apres quelques recherches dans les logs je pense que le fichier libopencv_imgcodecs310 (que se soit en mode static ou non) a été mal généré.
    Je continue mes recherches.
  • Apres quelques recherches dans les logs je pense que le fichier libopencv_imgcodecs310 (que se soit en mode static ou non) a été mal généré.
    Je pense aussi. La compilation a du mal se passer. Je n'ai jamais essayé de compiler opencv en static, ni Qt d'ailleurs.
    Regarde avec cmake si il y une option de compilation en utilisant ou pas libwebP
Connectez-vous ou Inscrivez-vous pour répondre.