IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Problème avec QTimer


Sujet :

Qt

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut Problème avec QTimer
    Bonjour,

    j'ai un problème avec QTimer, il me fait totalement planter mon programme lorsque je l'utilise conjointement avec une autre librairie (openCV).

    j'ai déclaré dans ma classe (dérivée de QLabel avec un Q_OBJECT) un QTimer (m_timer)
    ensuite dans le démarrage de mon appli, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    m_timer.start(100);
    connect(&m_timer, SIGNAL(timeout()), this, SLOT(captureLoop()));
    dans captureLoop() (public slots)
    j'ai une fonction d'une autre librairie qui récupère une image
    et appelle une autre méthode de ma classe qui détecte un visage sur l'image et retourne la position du visage. La détection s'effectue via une fonction de ma seconde librairie.

    Sauf que dès qu'il arrive à la détection (la fonction de l'autre librairie en particulier : cvtColor), le programme me met un segmentation fault. Sans rentrer dans la fonction (mode debbugeur)

    Si je désactive la détection, tout fonctionne avec le Timer de Qt.

    Vous allez surement me dire : "ben le problème viens de la fonction de détection de ton autre librairie"

    Eh bien non, car si je supprime le timer de Qt et que j'appelle ma méthode manuellement, tout fonctionne (mais pas de boucle possible).

    J'ai l'impression que c'est le méta code crée par Qt pour les slots personnalisés qui pose problème...

    Voici l'erreur généré par C::B : Segmentation Fault in icvBGRx2Gray_8u_CnC1R () (C:\Test\bin\Debug\libcv200.dll)

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Salut,

    "ben le problème viens de la fonction de détection de ton autre librairie"

    Non, en fait, segmentation fault veut dire que tu as un accès mémoire invalide. Et je pense que celui vient pas de QTimer, mais plutôt de l'appel successif de ta fonction de détection. En gros, je suis quasiment sûr que si dans ton constructeur tu appelles 3 fois ta fonction à la suite, tu auras la même erreur. Une de tes variables ne doit pas être correctement initialisé / écrasé entre deux appels de ta fonction (probablement une cvImage, ou ta cvCapture).

    Si tu nous mettait un peu de code, on pourrait sans doute t'aider un peu plus. Ou alors, tu peux mettre des tests sur tes variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(maVariable!=0)
    //je continue
    else
    qDebug()<<"maVariable est incorrecte";
     
    //etc.
    G.

    PS :
    m_timer.start(100);
    connect(&m_timer, SIGNAL(timeout()), this, SLOT(captureLoop()));
    Il est souvent préférable de faire le connect avant le start().
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    Lancement de l'application version qui marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int MaClasse::run()
    {
     // initialisations de capture / cascade ....
     if( capture.isOpened() )
     {
        connect(&m_timer, SIGNAL(timeout()), this, SLOT(captureLoop()));
        m_timer.start(100);
     }
      return 0;
    }
    Lancement de l'application version qui marche (une seule image car plus de boucle) mais s'affiche et plante pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int MaClasse::run()
    {
     // initialisations ....
     if( capture.isOpened() )
     {
        captureLoop();
     }
     return 0;
    }
    CaptureLoop :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    void MaClasse::captureLoop()
    {
    ostringstream score_str;
    Cercle c;
    // Capture la frame on la charge dans une matrice Mat
    capture >> frame;
     
    if( frame.empty() )
    	break;
     
    flip( frame, frame_copy, 1 );
     
    if(compteur>50 || compteur<1)
    {
    	compteur=0;
    	position_pt = giveRandomposition();
    	createRandomCreature(creature);
    	creature->setPosition(position_pt, ((double)NBCASES/(double)nb_cases));
    }
    compteur++;
     
    // Detection de visage
    if( detect_faces )
    {
    	// Appel de la fonction pour détecter et afficher les visages
    c = detect_and_draw_faces(2); // c'est dans cette fonction qui ma fait planter mon programme !!!!!!!
     
    	if(collisionCercle(creature->getPtGauche(), creature->getPtDroite(), c ))
    	{
    		 creature->updateScore(score);
    		 //score++;
    		 cout << "Collision - Score : " << score << endl;
    		 position_pt = giveRandomposition();
    		 createRandomCreature(creature);
    		 creature->setPosition(position_pt, ((double)NBCASES/(double)nb_cases));
    	}
    }
     
     
    // On affiche une grille
    if( show_grid )
    	draw_grid();
     
    creature->draw(frame_copy);
    score_str.str("");
    score_str << "Score : " << score;
    putText( frame_copy, score_str.str(), Point(6,12), CV_FONT_HERSHEY_SIMPLEX, 0.40, Scalar(0, 255, 0) );
     
    QImage test = Mat2QImage(frame_copy); // convertit Mat en QImage
    this->setPixmap(QPixmap::fromImage(test));
    this->update();
    }
    Méthode de détection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Cercle MaClasse::detect_and_draw_faces( double scale )
    {
        Point pt1, pt2, centre;
        int i;
        Cercle c1 = { 0, Point(0,0) };
        double diametre_cercle;
     
        vector<Rect> faces;
        Mat gray, smallFrame( cvRound (frame_copy.rows/scale), cvRound(frame_copy.cols/scale), CV_8UC1 );
     
        cvtColor( frame_copy, gray, CV_BGR2GRAY ); // ça plante à cette fonction !!!!!!!!!!!!!!
        resize( gray, smallFrame, smallFrame.size(), 0, 0, INTER_LINEAR );
        // ............
    }

    Toutes les variables non initialisées au début de captureLoop() sont des membres privées de ma classe.

    Le problème c'est que le segmentation fault apparait aussi en mode débugger pas à pas (donc logiquement je n'ai pas encore fait plusieurs appels successifs vu que c'est le premier passage)...

    je ne lance pas dans le constructeur mais dans une méthode que j'ai nommé run.

    Toutes les variables sont biens initialisés vu que ça fonctionne lorsque que la boucle est effectuée avec openCV au lieu de celle du QTimer.
    Comment tester des variables de type Mat (matrice openCV) dans le if ?

    Le code de détection est celui fournit dans les exemples de la librairie...

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Et si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int MaClasse::run()
    {
     // initialisations ....
     if( capture.isOpened() )
     {
        captureLoop();
        captureLoop();
        captureLoop();
        captureLoop();
     }
     return 0;
    }
    Ca marche correctement ?

    Sinon, en lisant la doc de cv:cvtColor, j'ai vu qu'il y aavait pas mal de prérequis avant d'appeler cette fonction, notamment sur la taille de l'image d'entrée et la table de conversion. http://opencv.willowgarage.com/docum...ormations.htmlJe n'ai pas pris le temps de lire, mais peut être que tu y trouveras qqchose d'intéressant.

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    Oui ça fonctionne correctement, l'image s'affiche, pas d'erreur.

    si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    namedWindow( "result", CV_WINDOW_AUTOSIZE);
    while(key != 'q')
    {
          captureLoop();
          key = waitKey( 10 );
    }
    Tout fonctionne (détection + affichage dans Qt), mais cela m'oblige à ouvrir une seconde fenetre (via namedWindow) de openCV qui me sert à rien. Mais qui est indispensable car sinon la fonction waitKey n'est pas utilisable...

    J'ai l'impression que c'est plutôt la mise en thread/fork de QTimer qui pose problème non ?

    EDIT : en mode debugger les images ne s'affiche pas dans les captureLoop() successif, il les affichent uniquement quand il execute app.exec();

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Ok. Une dernière chose, dans ta fonction captureLoop(),
    est ce que tu peux remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if( frame.empty() )
    	break;
     
    // par
    if( frame.empty() ){
    qDebug()<<"empty frame";
    return;
    }
    Et ressayer avec le QTimer ?

    Sinon, QTimer n'effectue pas ta fonction dans un autre thread / autre processus, c'est différent. Ta fonction ne sera jamais effectué en parallèle. Si elle est déjà en cours et que le timer arrive au timeout, rien ne se passe.

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par Gulish Voir le message
    Ok. Une dernière chose, dans ta fonction captureLoop(),
    est ce que tu peux remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if( frame.empty() )
    	break;
     
    // par
    if( frame.empty() ){
    qDebug()<<"empty frame";
    return;
    }
    Et ressayer avec le QTimer ?
    Toujours segmentation fault et rien ne s'affiche sur la console (qDebug)...
    Ce qui est bizzare c'est que sans la détection de visage, ça fonctionne... (en mettant : if( !detect_faces ) )

    Le fait que cvtColor soit une fonction définie dans une dll ne poserai t-il pas un problème lorsque Qt utilise les slots ? car je ne peux pas la débugger du faite qu'elle soit dans une dll...

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    Comme je le pensait, le problème venait de QTimer.
    J'ai trouvé une solution sur un autre forum qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    forever
    {
          captureLoop();
          QApplication::processEvents();
    }
    En revanche nouveau problème :
    lorsque je ferme la fenêtre en cliquant sur la croix, il ferme bien la fenetre (il la cache plutôt), mais la boucle elle continue de tourner...
    Je voudrais savoir comment quitter l'application quand on clique sur la croix ?

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    C'est vraiment étrange ... Ta classe "MaClasse" n'est pas un thread ? Ton application est elle multihread ? Car sinon, j'avoue ne pas comprendre la cause de cette erreur.

    Sinon, pour arrêter ton application, au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    forever
    {
          captureLoop();
          QApplication::processEvents();
    }
    tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    bool mustRun = true;
    while(mustRun)
    {
          captureLoop();
          QApplication::processEvents();
    }
    closeCapture();
    releaseObjects();
    //et tu redéfinis la méthode 
    void MaClasse::closeEvent(QCloseEvent *event)
    {
    mustRun=false;
    event->accept;
    }
    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Aure7780 Voir le message
    Comme je le pensait, le problème venait de QTimer.
    J'ai trouvé une solution sur un autre forum qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    forever
    {
          captureLoop();
          QApplication::processEvents();
    }
    haaaaaaaaaaaaaaaa... qu'es ce que c'est que cette horreur

    C'est pourquoi cette fonction?
    int MaClasse::run()
    c'est le run d'un thread?

    Pour le segfault, que t'affiche le debuggeur??

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par yan Voir le message
    haaaaaaaaaaaaaaaa... qu'es ce que c'est que cette horreur
    C'est la seule solution qui fonctionne pour le moment...
    Citation Envoyé par yan Voir le message
    C'est pourquoi cette fonction?
    int MaClasse::run()
    c'est le run d'un thread?
    Non ce n'est pas un thread, c'est le nom de ma méthode qui lance mon application. Ce nom de méthode peut gêner ?
    Citation Envoyé par yan Voir le message
    Pour le segfault, que t'affiche le debuggeur??
    Il affiche : Segmentation Fault in icvBGRx2Gray_8u_CnC1R () (C:\Test\bin\Debug\libcv200.dll)
    J'ai l'impression que cette fonction (qui n'est pas débuggable car situé dans la dll de la lib), n'aime pas la façon dont QTimer l'appelle. (je ne sais pas comment QTimer appel ses slots ?)

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Aure7780 Voir le message
    C'est la seule solution qui fonctionne pour le moment...
    je dirai qui tombe en marche....

    Non ce n'est pas un thread, c'est le nom de ma méthode qui lance mon application. Ce nom de méthode peut gêner ?
    Pour le relecteur oui, pour le programme non.


    Il affiche : Segmentation Fault in icvBGRx2Gray_8u_CnC1R () (C:\Test\bin\Debug\libcv200.dll)
    Peut tu montrer le reste des info du debuggeur?

    Peut tu montrer un peu plus de code?

    je ne sais pas comment QTimer appel ses slots ?
    Comme tu ne fait pas de multi-thread, tous les N millisecond, il emet un signal qui va exécuter ton slot.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    Peut tu montrer le reste des info du debuggeur?
    Comment ? j'ai mis ce qu'il avait mis : "Segmentation Fault in icvBGRx2Gray_8u_CnC1R () (C:\Test\bin\Debug\libcv200.dll)"
    Peut tu montrer un peu plus de code?
    Bien sur! j'ai simplifier mon code pour que ce soit plus lisible, mais le problème est le meme :

    main.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <QApplication>
    #include <cv.h>
    #include <highgui.h>
    #include "MaClasse.h"
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MaClasse obj;
        obj.show();
        obj.runy();
     
        return a.exec();
    }
    MaClasse.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <QWidget>
    #include <QObject>
    #include <QTimer>
    #include <cv.h>
    #include <highgui.h>
     
    using namespace cv;
     
    class MaClasse : public QWidget
    {
        Q_OBJECT
    public:
        MaClasse();
        void runy();
     
    public slots:
        void captureLoop();
     
    private:
        QTimer timer;
    };
    et MaClasse.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include "MaClasse.h"
     
    MaClasse::MaClasse()
    {
        //ctor
    }
     
    void MaClasse::runy()
    {
        connect(&timer, SIGNAL(timeout()), this, SLOT(captureLoop()));
     
        Mat test;
        Mat toto = imread("test.png");
        cvtColor(toto, test, CV_BGR2GRAY); // pas de problème
     
        timer.start(100);
    }
     
    void MaClasse::captureLoop()
    {
       Mat test;
       Mat toto = imread("test.png");
       cvtColor(toto, test, CV_BGR2GRAY); // erreur !!!!
    }

    Je pense que le problème viens des dll de openCV2.0 mais pourquoi avec QTimer ça plante et pas avec QApplication::processEvents(); ?

  14. #14
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Aure7780 Voir le message
    Comment ? j'ai mis ce qu'il avait mis : "Segmentation Fault in icvBGRx2Gray_8u_CnC1R () (C:\Test\bin\Debug\libcv200.dll)"
    Oui mais normalement tu as la callstack...


    Citation Envoyé par Aure7780 Voir le message
    Je pense que le problème viens des dll de openCV2.0 mais pourquoi avec QTimer ça plante et pas avec QApplication::processEvents(); ?
    J'ai rien vue de choquant
    C'est toi qui as compilé OpenCV ?
    Tu utilise quel compilateur?
    Tu es en debug ou release?

  15. #15
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Une remarque un peu hors sujet, mais je me suis amusé un peu avec OpenCV2.1 ce qui week end (je n'avais utilisé que la 1.0 avant), et j'ai eu plein de problèmes avec le wrapper c++ qu'ils ont rajouté dans cette version. Je suis très vite revenu aux fonctions C proposées (même si ça demande plus de bricolage).

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  16. #16
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Ca ressemble à ton truc
    http://stackoverflow.com/questions/2...ation-problems

    Tu ne serais pas sous Xp par hasard?

    as tu essayé sur une autre machine?
    Tu devrais tester si la version 2.1 pose aussi problème.

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    Merci pour vos réponses.

    Non je n'ai pas compiler openCV, c'est la version fournit sur leur site (*.a + *.dll)
    J'utilise CodeBlock + MinGW pour compiler (mode Debug) sous Windows 7 (64 bits). Le problème est le même sur une autre machine (Seven 64 bits aussi).
    Je n'ai pas pu tester la version 2.1 car elle n'est disponible que pour VS-2008 en version pre-compilé et je ne sais pas comment compiler ma propre version avec CodeBlock...(si une âme charitable pourrai m'aider)
    Oui mais normalement tu as la callstack...
    La Call Stack dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Address      Function                          File
    1002E4E4    icvBGRx2Gray_8u_CnC1R()  (C:\Test\bin\Debug\libcv200.dll)
    101C9367    cvtColor()                        (C:\Test\bin\Debug\libcv200.dll)
    C'est tout...

    Je pense qu'il faudrais recompiler ces dll mais je ne sais pas comment m'y prendre...

  18. #18
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    ha oui c'est gdb....
    Déjà tu sait que tu n'est le seule à avoir ce bug.
    C'est rassurant

    Si tu utilise une des dernière version de QT, il utilise normalement gcc 4 et si cela se trouve tes binaire OpenCv sont compilé avec Gcc3. Et je sais qu'il y as des incompatibilité entre les deux

    Pour la compilation, je te conseil de demander de l'aide sur le forum OpenCv
    http://www.developpez.net/forums/f73...heques/opencv/

    Faudrait regarder dans les sources. Doit y avoir un readme qui explique comment faire.
    [edit]
    http://opencv.willowgarage.com/wiki/MinGW

  19. #19
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Si tu utilise une des dernière version de QT, il utilise normalement gcc 4 et si cela se trouve tes binaire OpenCv sont compilé avec Gcc3. Et je sais qu'il y as des incompatibilité entre les deux
    En effet, j'ai eu ce genre de problème lors de la compil (j'avais essayé avec QtCreator 2.0). Notamment sur une "libVideoInput.a" qui voulait pas se compiler justement à cause de ces versions de gcc.


    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    C'était bien ça le problème !!!
    J'ai recomplier les sources avec CodeBlock 10.05 (non sans mal) et récupérer les nouvelles *.dll et *.a
    Maintenant ça fonctionne nickel avec QTimer !!!!! Trop cool.
    Merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème avec QTimer
    Par crazy_inf dans le forum Qt
    Réponses: 1
    Dernier message: 06/04/2010, 10h51
  2. [QThread] Problème avec QTimer et QThread
    Par scary dans le forum Multithreading
    Réponses: 7
    Dernier message: 15/12/2009, 18h00
  3. Qt Problème avec un QTimer
    Par U118gs dans le forum Qt
    Réponses: 3
    Dernier message: 22/08/2008, 09h28
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo