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 :

Niveau de gris sur une image YCrCb


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut Niveau de gris sur une image YCrCb
    Bonjour à tous.
    Je travail actuellement sur un projet de reconnaissance faciale, et je suis bloqué sur une fonction opencv : cvConvertImage(......);

    En effet, après avoir changer l'espace couleur de mon image de RGB à YCrCb en utilisant la fonction:cvCvtColor(img,img_y,CV_RGB2YCrCb), je dois appliqué le niveau de gris sur l'image en utilisant la composante luminance Y seulement.

    Voici mon code
    :

    IplImage* img=cvLoadImage(ch.c_str());
    IplImage* img_y=cvCloneImage(img);
    cvCvtColor(img,img_y,CV_RGB2YCrCb);
    img_nvg = cvCreateImage(cvGetSize(img_y), img_y->depth, 1);
    //Correction de l'origine si nécessaire
    int flip = 0;
    if(img->origin!=IPL_ORIGIN_TL){
    flip = CV_CVTIMG_FLIP;
    }
    cvConvertImage(img_y, img_nvg, flip);
    cvShowImage("Résultat", img_y);

    est ce que quelqu'un peut m'aider svp.

  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
    1
    2
    img_nvg = cvCreateImage(cvGetSize(img_y), img_y->depth, 1);
    8 bit l'image en nvg de plus ton image de départ doit être en 8 bit ou en float

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    img_nvg = cvCreateImage(cvGetSize(img_y), img_y->depth, 1)

    Le troisième paramètre (1) signifie qu'on utilise un seul canal c'est à dire l'image est codé sur 8 bit.

    En plus, j'ai déjà appliqué le niveau de gris sur l'image, mais le but c'est de l'appliquer seulement sur la composante luminance (Y) puisqu'on travaille dans l'espace couleur YCrCb.

    Merci d'avance.

  4. #4
    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
    1
    2
    3
    4
    5
    6
    7
     
    IplImage* cvCreateImage(CvSize size, int depth, int channels)
    Creates an image header and allocates the image data
     
    Parameters: •size – Image width and height
    •depth – Image depth (see CreateImage)
    •channels – Number of channels (see CreateImage)
    le 1 correspond au nombre de channel et non à la taille

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Par défaut
    C'est vrai, tu as raison et j'ai modifié alors cette ligne:

    img_nvg = cvCreateImage(cvGetSize(img_y), IPL_DEPTH_8U, 1)

    Par contre, le problème, c'est qu'il faut appliquer le niveau de gris seulement sur la composante luminance Y.

    En utilisant cette fonction:
    cvConvertImage(img_y, img_nvg, flip);

    Je pense que je suis entrain d'appliquer le niveau de gris sur les trois canaux (Y, Cr, Cb).

  6. #6
    Membre chevronné
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Par défaut
    Oui en effet tu le fais sur l'image complète mais ceci devrait t'aider :
    void cvSplit(const CvArr* src, CvArr* dst0, CvArr* dst1, CvArr* dst2, CvArr* dst3)¶
    Divides multi-channel array into several single-channel arrays or extracts a single channel from the array.

    #define cvCvtPixToPlane cvSplit
    Parameters: •src – Source array
    •dst0 – Destination channel 0
    •dst1 – Destination channel 1
    •dst2 – Destination channel 2
    •dst3 – Destination channel 3


    The function divides a multi-channel array into separate single-channel arrays. Two modes are available for the operation. If the source array has N channels then if the first N destination channels are not NULL, they all are extracted from the source array; if only a single destination channel of the first N is not NULL, this particular channel is extracted; otherwise an error is raised. The rest of the destination channels (beyond the first N) must always be NULL. For IplImage Copy with COI set can be also used to extract a single channel from the image.

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

Discussions similaires

  1. objet en niveau de gris ds une image labelisée
    Par ImagingAllthe dans le forum Images
    Réponses: 4
    Dernier message: 23/10/2009, 15h29
  2. Réponses: 15
    Dernier message: 07/06/2009, 05h22
  3. niveau de gris d'une image
    Par bestof_net dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/05/2009, 21h44
  4. Réponses: 6
    Dernier message: 30/11/2006, 11h08
  5. Niveau de gris d'une image
    Par chahinez dans le forum C++Builder
    Réponses: 13
    Dernier message: 12/06/2006, 21h17

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