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 :

Utilisation de la ROI ailleurs qu'à l'origine


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 59
    Par défaut Utilisation de la ROI ailleurs qu'à l'origine
    Bonjour tout le monde,

    Dans le cadre d'une application de détection d'objets à des fins d'assistance à la navigation pour une chaise roulante, j'utilise les méthodes de flux optique de OpenCV (cvGoodFeaturesToTrack, cvCalcOpticalFlowPyrLK), mais il se trouve que selon l'environnement, l'ensemble des points (features) détectés sont majoritairement situés dans le haut de l'image, ce qui ne m'interesse pas, car les objets proches, donc "intéressants dans l'immédiat" sont situés généralement sur le bas de l'image.

    J'ai donc décidé de définir une ROI (region of interest) dans la moitié inférieure de mon image. Ca fonctionne mais... Quel que soient les coordonnées que je lui donne, ma ROI se situe à l'origine de mon image (en haut à gauche), donc c'est toujours dans la mauvaise moitié de l'image que les points sont détectés...

    Voici ce que j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Definit un carre de 100*100 en coordonnees 200:200 pour le test
    CvRect roi = cvRect(200,200,100,100);
     
    cvSetImageROI(currentMonochromeFrame, roi);
    Donc la, le carré fait bien 100*100, mais se trouve en position 0:0


    Pour info, je travail sous MacOS, je ne sais pas si ca une influence...

    Merci de votre aide

  2. #2
    Membre éclairé Avatar de gassi64
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 255
    Par défaut
    Peux tu nous montrer un peu plus de code stp? A voir comme ça, ça a l'air bien forcément.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 59
    Par défaut
    C'est aussi ce qu'il me semblait, j'ai regardé les codes que je trouvais sur internet et ils ont l'air de faire de la meme manière que moi... Pour obtenir ce que je veux, j'ai pour l'instant retourné mon image de base (cvFlip) je la traite, puis je la retourne à nouveau pour l'affichage... Mais ce système ne suffira pas par la suite, quand j'utiliserai diverses ROI...

    Alors voici la méthode en entier
    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
       void ComputerVision::processImage(IplImage * currentFrame)
       {
          //Copy current frame to the previous one and get a new one
          cvCopy(currentMonochromeFrame, previousMonochromeFrame);
          cvCopy(currentFrame, currentMonochromeFrame);
     
     
          CvRect roi = cvRect(0,0,frameSize.width, (int)frameSize.height / 2.0);
     
          cvSetImageROI(currentMonochromeFrame, roi);
          cvSetImageROI(previousMonochromeFrame, roi);
          cvSetImageROI(eigImage, roi);
          cvSetImageROI(tempImage, roi);
          cvSetImageROI(pyramid1, roi);
          cvSetImageROI(pyramid2, roi);
     
          cvGoodFeaturesToTrack(previousMonochromeFrame, eigImage, tempImage, previousFeatures, &featuresNumber, .01, .01, NULL); 
     
          //Compute the optical flow
          cvCalcOpticalFlowPyrLK(previousMonochromeFrame, currentMonochromeFrame, pyramid1, pyramid2, previousFeatures, 
                                 currentFeatures, featuresNumber, opticalFlowWindow, MAXPYRAMIDS, 
                                 foundFeatures, errorFeatures, 
                                 termCriteria, ENHANCEMENTS); 
     
          cvResetImageROI(currentMonochromeFrame);
          cvResetImageROI(previousMonochromeFrame);
       }
    Pour le moment, à des fins de débug, la ROI est définie à l'intérieur, mais par la suite, l'idée serait d'en faire un paramètre réglable.

    Si tu veux l'appli entière, je peux également en faire une archive pour la déposer ici en pièce jointe.

    Je pense que je vais également faire un test sur une VM windows pour voir si le comportement est pareil... (l'ouvrier préfère forcement accuser l'outil plutôt que lui même )


    En tout cas, merci de ton aide

  4. #4
    Membre éclairé Avatar de gassi64
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 255
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CvRect roi = cvRect(0,0,...
    He bien là la position de ton carré commence bien à l'origine...c'est où que tu veux avoir une position ailleurs?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 59
    Par défaut
    Oui, effectivement, je t'ai donné le mauvais code. La, j'ai fait comme j'ai dit plus haut, càd en retournant mon image pour que la ROI soit au bon endroit. Mais j'ai beau changer ces valeurs à volonté rien ne se passe...

    Par exemple comme j'avais avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
          CvRect roi = cvRect((int)frameSize.height / 2.0,0,frameSize.width, (int)frameSize.height / 2.0);
          //CvRect roi = cvRect(0,0,frameSize.width, (int)frameSize.height / 2.0);
     
          cvSetImageROI(currentMonochromeFrame, roi);
          cvSetImageROI(previousMonochromeFrame, roi);
          cvSetImageROI(eigImage, roi);
          cvSetImageROI(tempImage, roi);
          cvSetImageROI(pyramid1, roi);
          cvSetImageROI(pyramid2, roi);
    Par contre, je viens de le remarquer que si la coordonnée Y de ma ROI + sa hauteur sont supérieures à la taille de ma frame, ca plante...

  6. #6
    Membre éprouvé Avatar de hunta_kirua
    Profil pro
    Inscrit en
    Février 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 110
    Par défaut
    Salut,

    Pour le CvRect, c'est CvRect(int xRoi, int yRoi, int widthRoi, int heightRoi), donc j'aurai plutôt vu :
    CvRect roi = cvRect(0, (int)frameSize.height / 2.0, frameSize.width, (int)frameSize.height / 2.0);

    Tu fais pas mal de cvSetImageROI mais tous ne sont pas supprimer par cvResetImageROI, normal ?

    Sinon regarde cet exemple en bas de page :
    http://www.developpez.net/forums/arc.../t-540921.html
    Il est fonctionnel, j'obtenais bien une mosaïque en changeant le roi de place.

    A+,

    Hunta

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

Discussions similaires

  1. [Joomla!] Utiliser un module/une extension Joomla ailleurs que dans le CMS
    Par fashuai dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 26/04/2009, 21h59
  2. [POO] Utiliser un membre static ailleurs ou ?
    Par Metallizer dans le forum C++
    Réponses: 2
    Dernier message: 04/12/2008, 18h45
  3. utilisation d'une fonction ailleur dans le code
    Par tortuegenie dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/11/2008, 11h07
  4. Récupérer une injection pour l'utiliser ailleurs
    Par f-k-z dans le forum Langage
    Réponses: 5
    Dernier message: 20/03/2008, 00h15
  5. Récupérer un socket utilisé pour l'utiliser ailleurs
    Par v4np13 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 01/12/2007, 10h11

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