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 :

Problème avec la fonction Rectangle


Sujet :

OpenCV

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2013
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 41
    Points : 27
    Points
    27
    Par défaut Problème avec la fonction Rectangle
    Bonjour,

    Je n'arrive pas à dessiner un simple rectangle sur OpenCV...
    J'arrive seulement à dessiner une ligne horizontale en haut de la fenêtre windows.

    Lorsque j'utilise le code suivant pour tracker la face il n'y a pas de problèmes le rectangle apparaît autour du visage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::vector<cv::Rect> faces;
    face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE|CV_HAAR_FIND_BIGGEST_OBJECT, cv::Size(150, 150) );
    for( int i = 0; i < faces.size(); i++ )
      {
        rectangle(debugImage, faces[i], 1234);
    	printf("testets %d \n", faces[i].tl().y);
      }
    Avec la dernière ligne de code j'ai même pu observer les coordonnées des rectangles pour vérifier les coordonnées de ma fenêtre windows.

    Lorsque j'essaie ce code rien n'apparaît à l'écran:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Rect face1;
      Point topleft=(100,100);  
      Point botomright=(150,150);
      face1.tl()=topleft;
      face1.br()=botomright;
      rectangle(debugImage, face1, 1234);
    Lorsque j'essaie ce code (en essayant plusieurs possibilités pour les coordonnées), une ligne apparaît en haut de l'écran (se déplaçant parfois suivant les coordonnées des points):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      Point topleft=(100,100); 
      Point botomright=(150,150);
      rectangle(debugImage, botomright, topleft, 1234);
    C'est comme si le rectangle était tracé en dehors des limites de la fenêtre windows. Pourtant, comme je l'ai dit plus haut, j'ai vérifié les coordonnées de la fenêtre windows et il me semble donc être dans le bon intervalle. J'ai également inversé l'ordre des points avec "topleft" avant "botomright".

    Cela devrait pourtant être une fonction simple à réaliser...
    Je ne vois pas où est le problème.

    Quelqu'un pourrait-il m'aider svp?

    Cordialement.

    Kévin LELU

  2. #2
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Je dis peut-être une bétise, mais la fonction rectangle, elle n'a pas besoin des quatres points de ton rectangle pour pouvoir le tracer?

    ça semblerait normal que tu n'ais pas de rectangle visible si les deux points restants ne sont pas initialisés :/
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2013
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Voici la définition de la fonction rectangle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //! draws the rectangle outline or a solid rectangle with the opposite corners pt1 and pt2 in the image
    CV_EXPORTS_W void rectangle(CV_IN_OUT Mat& img, Point pt1, Point pt2,
                              const Scalar& color, int thickness=1,
                              int lineType=8, int shift=0);
     
    //! draws the rectangle outline or a solid rectangle covering rec in the image
    CV_EXPORTS void rectangle(CV_IN_OUT Mat& img, Rect rec,
                              const Scalar& color, int thickness=1,
                              int lineType=8, int shift=0);
    Merci pour votre aide mais il semble bien que pour définir un rectangle il faille choisir les deux points opposés ou le rectangle directement. Dans la documentation d'OpenCV la même chose est expliquée.

    Toujours pas de solution donc...

    J'avoue ne pas comprendre où se trouve l'erreur.

  4. #4
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Déjà le fait d'utiliser 1234 pour la couleur, est pas top je pense, comme c'est un vecteur de quatre valeurs, il y a surement une valeur pour l'alpha.

    L'image degubImage est-elle bien initialisée comme il faut? concernant la largeur et la longueur?
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2013
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Voici les fonctions principales que j'utilise:
    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
    int main(int argc, const char** argv){
     
    Mat frame;
    VideoCapture cap;
    cap.open(0);
     
    cv::namedWindow(main_window_name,CV_WINDOW_NORMAL);
     
    while(true){
     
     
    /**get capture**/
    cap>>frame;
     
    /**horizontal flipping of the image and copy in debugImage (to be like a mirror)**/
    flip(frame,frame,1);
    frame.copyTo(debugImage);
     
      Point topleft=(10,40);  
      Point botomright=(50,90);
      rectangle(debugImage, topleft, botomright, Scalar( 255, 0, 100 ), 4, 8,0);
     
    imshow(main_window_name,debugImage);
     
     
    }
     
    cvWaitKey(33);
     
    return 0;
     
     
    }
    J'ai changé la couleur. Lorsque je fais varier le Scalar la couleur change, tout comme l'épaisseur change lorsque je la fais varier.

    C'est vraiment comme si il y avait un problème de dimension de fenêtre windows.

    Quand j'utilise la fonction pour tracer un cercle il n'y a pourtant pas de problème de dimensions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    circle(debugImage, point, 20, 500);
    Je trouve ceci quand même étrange même si je pense que le problème est simple à résoudre mais je ne vois pas comment.

  6. #6
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Comment l'image debugImage est-elle construite?
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2013
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Comme il est indiqué dans le programme de mon post précédent "debugImage" est une copie de "frame" via la fonction "copyTo":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    frame.copyTo(debugImage);

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Les fonctions pour tracer : cercle, line ... prennent des Scalar pour definir les couleurs et non pas des int.

Discussions similaires

  1. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33
  2. Problème avec la fonction findfirst ()
    Par Angelico dans le forum Windows
    Réponses: 3
    Dernier message: 05/08/2004, 20h40
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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