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 :

[MFC] Flux vidéo OpenCV dans un composant MFC


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut [MFC] Flux vidéo OpenCV dans un composant MFC
    Bonjour à tous !

    J'aurai aimé savoir si quelqu'un savait comment faire pour rediriger le flux d'une webcam directement dans un composant MFC (ou un autre composant d'une autre bibliothèque de la sorte) ?

    En effet :
    - je dois utiliser simultanément plusieurs webcams
    - mon acquisition vidéo doit se faire dans un thread, et ce thread ne doit pas gérer l'UI sinon une manipulation sur l'affichage bloque l’acquisition

    Actuellement j'utilise la méthode imshow qui a pour inconvénient de créer une nouvelle fenêtre par flux, donc j'ai plusieurs fenêtres qui sont de surcroit dépendantes les unes des autres ... tout sauf ce que je voudrai quoi.

    Merci d'avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur 3D
    Inscrit en
    Avril 2008
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur 3D

    Informations forums :
    Inscription : Avril 2008
    Messages : 400
    Par défaut
    Il n'y a pas a rediriger de flux. C'est a toi d’arrêter de l'afficher avec ton imshow et d'apprendre a l'afficher dans ton système d'interface graphique. Comme je ne connais rien en interfaces graphique, tout ce que je peux te dire, c'est que tu dois aller dans ta cv::Mat et récupérer le pointeur sur les données pour ensuite faire un peu de magie si nécessaire (conversion de couleurs et autres) et coller le tout dans ton composant.

  3. #3
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Citation Envoyé par math_lab Voir le message
    Il n'y a pas a rediriger de flux. C'est a toi d’arrêter de l'afficher avec ton imshow et d'apprendre a l'afficher dans ton système d'interface graphique. Comme je ne connais rien en interfaces graphique, tout ce que je peux te dire, c'est que tu dois aller dans ta cv::Mat et récupérer le pointeur sur les données pour ensuite faire un peu de magie si nécessaire (conversion de couleurs et autres) et coller le tout dans ton composant.
    Merci pour ta réponse, mais non ce n'est pas bon du tout à commencer parce que mon acquisition se fait dans un thread disjoint de l'affichage.

    Et puis si je dois aller récupérer une sorte de bitmap dans un objet Mat pour le recopier dans mon composant je vais commencer à légitimement me poser la question de l'utilité d'OpenCV ...

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 38
    Par défaut
    avec Qt et sa gestion des threads tu peux t'en sortir.
    Tu lance un thread par caméra.
    La caméra est lue avec openCV, puis l'image "openCV" est transformé en image Qt (QImage), enfin tu affiche l'image (repaint).

    L'avantage c'est que en plus d'avoir directement l'accés aux webcam, tu peux appliquer ton traitement d'images vidéo openCV avant de donner l'image à Qt pour l'affichage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    OPENCV
    acquisition + traitement vidéo
     
    Qt
    affichage + gestion de fenêtre (bouton, etc)

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    Citation Envoyé par TheGzD Voir le message
    Et puis si je dois aller récupérer une sorte de bitmap dans un objet Mat pour le recopier dans mon composant je vais commencer à légitimement me poser la question de l'utilité d'OpenCV ...
    Le but principal d'OpenCV n'est pas de faire de la capture, mais du traitement d'image (contraste, luminosité, binarisation, détection de contour, reconnaissance de forme, classification, etc). Les fonctionnalités de capture sont présentes, évitant le recours à une autre lib, mais avec le strict minimum permettant de couvrir la plupart des utilisations. D'ailleurs, le code pour la capture provient de la librairie videoInput.
    Si ton objectif premier est de faire de l'UI, effectivement, OpenCV n'est peut-être pas la lib la plus appropriée. Au mieux, il te faudra effectivement récupérer les images que te renvoie OpenCV pour ensuite les convertir et les afficher avec une vraie lib prévue pour de l'UI. Ce que j'avais fait dans un projet de test avec GTK.

  6. #6
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Merci pour vos réponses.

    Oui, je comprends bien que OpenCV n'est pas une bibliothèque de capture vidéo, par contre comme tu le dis elle est destinée au traitement d'images.
    Dans bien des cas de traitements le résultat du traitement est une nouvelle image, ce qui dans le cas d'un flux vidéo (qui n'est qu'une succession d'images) revient à vouloir un flux vidéo en sortie. Si après je ne peux pas afficher ce résultat comme je l'entends ça me pose vraiment problème.

    Concernant les différentes techniques de conversion de l'image avant affichage ce qui me dérange c'est que mon traitement vidéo s'effectue derrière un thread MFC. Donc je risque d'avoir des soucis pour que l'affichage reçoive les images dans le bon ordre (si je "pousse" les données l'affichage) ou il faudra que l'affichage vienne lire dans la mémoire du thread (si l'affichage vient "tirer" les données) à pas de temps plus ou moins régulier ... dans les 2 cas ça ne me semble ni très classe ni très sûr comme méthodes ... après je peux me tromper.

  7. #7
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    L'utilisation de thread n'est pas problématique en soi. Bien au contraire, dès que tu veux paralléliser certaines taches, c'est, je pense, l'approche la plus naturelle. On peut imaginer dans ton cas avoir 3 threads:
    - acquisition
    - traitement
    - affichage
    Et même pourquoi pas plusieurs threads pour le traitement car c'est a priori celui-ci qui va être un goulot d'étranglement.
    Il faut juste bien gérer les accès mémoire correctement et éventuellement utiliser des mutex où il faut. Pour les détails de l'implémentation, c'est à toi de voir ensuite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Intégration d'un flux vidéo OpenCV dans GTK+
    Par kurapix dans le forum OpenCV
    Réponses: 2
    Dernier message: 19/10/2008, 15h31
  2. [MFC] afficher une ProgressBar dans une barre d'etat
    Par guillaume21 dans le forum MFC
    Réponses: 5
    Dernier message: 30/03/2007, 11h16
  3. [MFC]Pb d'édition dans un CTreeCtrl ???
    Par Lofwyr dans le forum MFC
    Réponses: 6
    Dernier message: 01/08/2003, 14h46
  4. [MFC]Ecrire du texte dans un rectangle
    Par zaz16 dans le forum MFC
    Réponses: 8
    Dernier message: 29/07/2003, 10h31
  5. Réponses: 2
    Dernier message: 10/06/2002, 11h03

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