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 :

Fusion de deux images de webcams et détection d'objets


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Par défaut Fusion de deux images de webcams et détection d'objets
    Bonjour tout le monde,

    Je suis en train de créer un logiciel de détection et de guidage en temps réel et pour cela j'ai quelques questions.

    Je souhaite exploiter les images de deux Webcams (placées à des endroits différents sur ma maquette, mais avec une zone intermédiaire commune). Pour l'acquisition et le traitement des images séparément, je m'en sors pour l'instant en utilisant les CvCapture. J'ai donc mes deux fenêtres avec l'affichage des 2 caméras.

    Là où je rencontre une difficulté, c'est comment "fusionner" ces deux images? Ce que je souhaiterais, c'est obtenir au final une seule IplImage sur laquelle effectuer tous les traitements et qui serait l'addition des deux images mises côte à côte en "regroupant" la zone commune.
    J'avais pensé à capturer les deux images, puis mettre la 1ère capture dans une IplImage aux coordonnées 0,0 et enfin mettre la 2ème capture aux coordonnées 600,0 par exemple (si l'on considère que la capture fait du 640,480 et que la zone identique aux deux images est de 40pxls). Cela impliquerait donc de "supprimer" la zone commune d'une des deux images pour la garder que sur la 2ème capture. C'est un peu du bricolage, mais c'est l'idée qui m'est venue. Est-ce possible? Si-oui auriez-vous des idées comment s'y prendre?

    Et la 2ème question: une fois l'image obtenue, comment reconnaitre les objets? En passant par les couleurs (avec le seuillage)?

    Merci par avance pour vos réponses.

  2. #2
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    tu balayes l'image (ton premier screen) suivant x et y et tu recopie à la main les pixels dans ta nouvelle image et tu recommence la même chose avec la deuxième image. Pour le balayage ta un exemple qui traine La y a aussi de quoi récupérer la valeur du pixel et pour le recopier tu fais la même chose mais avec le cvset2D il me semble, sinon ta une autre méthode expliqué dans la Doc de openCV. Pour ton tracking d'objet il faut un peu plus de précision le type de l'objet par exemple.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Par défaut
    Merci pour ta réponse, cela parait effectivement une bonne idée.

    Cependant, j'ai essayé cette méthode (avec les CvGet2D et CvSet2D) et ça me fais planter le programme. A mon avis cette méthode est trop "lourde" pour un traitement à des intervalles très courts. :/

    Ce qui serait bien, c'est s'il était possible au moment de passer le capture à l'IplImage de placer la 1ère capture à 0,0 et la 2nde à 600,0. Mais je n'ai rien trouvé à ce sujet..

  4. #4
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    le traitement est pas si énorme que ca, je l'ai fait sur du 1900*1400 ca le gère assez bien sachant que j'avais en plus un camshift et un haar qui tourné. Tu entends quoi par ca plante ?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2009
    Messages : 141
    Par défaut
    Je suis d'accord avec snowpy c'est pas trop "lourd". Mais pour ton probleme je pense que ca plante parce que tu tentes d'ecrire hors des limites de l'image.
    Pour faire ce que tu veux faire( si vraiment la partie commune n'est pas importante) tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IplImage * img = cvCreateImage(cvSize(imageGaughe->width+imageDroite->width-LargeurPartieCommune,imageGauche->height),IPL_DEPTH_8U,1);
    Et apres ca tu fais de la recopie de pixels comme dans l'exemple donne par snowpy:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (int i=0; i < monImageGauche->height; i++)
    {
    	for (int j=0; j < monImageGauche->width; j++)
    	{
                          cvSet2D(img,i,j,etc...)
                          cvSet2D(img,i,j+monImageGauche->width-Largeurpartiecommune,etc...)
    	}
    }

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Par défaut
    Merci pour vos réponses, mais j'ai finalement trouvé une autre méthode très efficace (aucun soucis pour ma part pour du temps réel).

    Voilà la partie du code si cela peut aider d'autres personnes:

    cvSetImageROI(img1,cvRect(0,0,600,480));
    cvSetImageROI(imgF,cvRect(0,0,600,480));
    cvCopy(img1,imgF);
    cvResetImageROI(img1);
    cvResetImageROI(imgF);

    cvSetImageROI(img2,cvRect(0,0,640,480));
    cvSetImageROI(imgF,cvRect(600,0,640,480));
    cvCopy(img2,imgF);
    cvResetImageROI(img2);
    cvResetImageROI(imgF);

    Maintenant je m'occupe de la partie détection d'objets (j'utilise le seuillage avec les couleurs), ça devrait aller. Et ensuite je m'occupe du path finding, il faut que je regarde comment je peux combiner ça avec OpenCV..

Discussions similaires

  1. Fusion de deux images par rapport à une ligne
    Par GabySchemoul dans le forum OpenCV
    Réponses: 8
    Dernier message: 18/04/2012, 11h14
  2. Fusion verticale de deux images avec WIA
    Par blondelle dans le forum C++Builder
    Réponses: 0
    Dernier message: 22/05/2009, 15h25
  3. Réponses: 0
    Dernier message: 05/12/2008, 17h30
  4. fusion de deux images
    Par s-ehtp dans le forum Imagerie
    Réponses: 1
    Dernier message: 02/07/2008, 10h45

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