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

OpenCV Discussion :

Qt et boucle


Sujet :

OpenCV

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 130
    Par défaut Qt et boucle
    Bonjour,

    J'ai réussi à intégrer une image de ma webcam sur une QImage de Qt et l'afficher.

    Tout vas bien pour 1 seule image, mais le problème viens du faite que c'est une webcam et qu'il y a plusieurs images par secondes.

    Par défaut j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    namedWindow( "result", 1 ); // pour créer une fenetre openCV (highGUI)
    et dans ma boucle while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(key != 'q')
    {
     // traitement 
     key = waitKey(10); // on attends un peu la pression d'une touche utilisateur + on attends la prochaine frame.
    }
    Le problème est que lorsque j'affiche dans ma fenetre Qt, la fenetre de OpenCv reste ouverte et vide (ce que je veux enlever)

    J'ai donc mis en commentaire namedWindow, mais le problème c'est que à l'execution, mon programme "ne réponds plus".
    En faite waitKey ne marche que si une fenêtre highGUI est définie, or comme namedWindow n'existe plus, elle ne s'éxécute pas.

    Donc comme il n'y a plus cette pause entre chaque frame, le problème "ne réponds plus" lamentablement...

    Comment faire pour contourner le waitKey et utiliser une autre solution dans ma boucle ?

  2. #2
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       if(!cvGrabFrame( capture ))
    je sais pas si ca marche toujours, tu essaye de la Grabble et si tu y arrive pas ben tu fais rien, ca évite de téléscoper 2 images.

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 130
    Par défaut
    VideoCapture capture;
    Mat frame;
    capture >> frame;

    ce qui reviens à graber une frame dans la version C++ de la librairie !
    C'est que qui est fait dans la partie traitement...

  4. #4
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    pourquoi ne pas incorporer ta fenetre openCV dans QT (je ne connais pas du tout QT donc c'est juste une idée).

    Sinon tu attends un caractère clavier de manière normal et tu déclenche un timer et une fois le timer à 10 ms (environ) tu passe ton chemin. Tu peux aussi réduire la taille de ta fenetre et la caché derrière ta fenêtre QT.

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 130
    Par défaut
    Citation Envoyé par snowpy Voir le message
    pourquoi ne pas incorporer ta fenetre openCV dans QT (je ne connais pas du tout QT donc c'est juste une idée).
    Oui mais comment ?
    Pour le moment je récupère l'image généré par openCV et je la convertit en QImage (image sous Qt) que j'affiche.

    Le problème c'est que waitKey permet de faire un "pause" pour passer d'une frame à l'autre. Sauf qu'elle ne fonctionne que si une fenêtre OpenCV est déclarée. Donc je s'enlève la fenêtre de openCV, ça ne fonctionne plus...

    Je cherche donc un moyen de lancer périodiquement (toutes les 100ms par exemple), la fonction qui récupère mon image via openCV et qui la convertit puis l'affiche.

    Comment faire ça ?

  6. #6
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    tu peux faire un wait pour remplacer le waitkey mais tu n'auras plus l'intéraction clavier avec l'utilisateur
    ce que je voulais dire pour la fenetre QT c'est, t'est'il possible de superposer les fenêtres en faisant comme si il n'y en avais qu'une seule ?

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 130
    Par défaut
    Dès que je remplace waitKey par un Sleep ou wait, le programme ne fonctionne plus ! (not responding)

    Il n'y a pas moyen de débugger waitKey car elle doit être dans les dll...donc je ne sais pas comment elle fonctionne.

  8. #8
    Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 2
    Par défaut
    Je voulais savoir si quelqu'un a la solution au problème ? car ça m’intéresse... Merci !

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. [langage] if et boucle { ..}
    Par kacedda dans le forum Langage
    Réponses: 15
    Dernier message: 28/04/2003, 17h25
  3. [directsound] boucle de traitement de son
    Par gargle dans le forum DirectX
    Réponses: 5
    Dernier message: 24/03/2003, 10h47
  4. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38
  5. Réponses: 2
    Dernier message: 29/05/2002, 20h43

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