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 :

Gestion des couleurs


Sujet :

OpenCV

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Gestion des couleurs
    bonjour, je viens de commencer a utiliser open CV et je n'arrive pas a realiser un tri dans les couleurs de pixels.. (je veux trouver un objet rouge dans mon image..

    Apres avoir lus quelques cours et la docs, je suis arrivé a ce code ci :

    Code c++ : 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
    IplImage *frame;
    	frame = cvCreateImage(cvGetSize(Image), IPL_DEPTH_8U, 3);
    	frame = cvCloneImage( Image );
     
    	int step=frame->widthStep;
    	unsigned char *data= reinterpret_cast<unsigned char *>(frame->imageData);
     
    	for(int i=0;i<frame->height;i++)
    	{
    		for(int j=0;j<(frame->width*frame->nChannels);j=j+frame->nChannels);
    		{
    			if((data[j]<128)&&(data[j+1]<128)&&(data[j+2]>128))
    			{data[j]=0;data[j+1]=0;data[j+2]=255;}
    			else
    			{data[j]=128;data[j+1]=128;data[j+2]=128;}
    		}
    		data+=step;
    	}
     
    	Name_Tmp.Format(m_File_Name+" red");
    	cvNamedWindow(Name_Tmp, CV_WINDOW_AUTOSIZE);
    	cvShowImage(Name_Tmp, frame);
     
    	//Libérer l’espace des images
    	cvReleaseImage( &frame );

    Donc, jai bien mes images pas de soucis... en revanche la partie pour chercher la couleur ne marche pas... une idée ??
    Jai du mal a comprendre la facon de recherché les composantes de couleurs dans un pixel..
    merci beaucoup

  2. #2
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 47
    Points : 32
    Points
    32
    Par défaut
    Bonjour,
    Je ne connais pas bien OpenCV mais si je lis bien ton code, "frame" est ton image donc logiquement une matrice RGB de taille length*width*3 et tu souhaites extraire un objet de couleur rouge grâce à "data".
    mais pourquoi data est de dimension 1?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Le data correspond au trois couleurs RGB... il est donc en 1 dimension avec trois composantes...
    a chaque boucle on prend les valeurs du pixel... enfin c'est comme cela que je voyais mon truc

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 47
    Points : 32
    Points
    32
    Par défaut
    Oki. Si j'ai bien compris la structure de "data" est [ R G B R G B R G B .... ].
    Est ce que tu pe m'envoyer ton image peut etre je peux t'aider plus mais là ?
    @ +

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Le code m'a l'air juste. Ca serait plus clair (comme le conseil le wiki) si tu utilisais la structure CvScalar ou un wrapper C++, mais bon, c'est toi qui vois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CvScalar s;
     
    s=cvGet2D(img,i,j);
    if ((s.val[0]<128) && (s.val[1]<128) && (s.val[2]>128)) {
      s.val[0]=0; // B
      s.val[1]=0; // G
      s.val[2]=255; // R
    } else {
      s.val[0]=128;
      s.val[1]=128;
      s.val[2]=128;
    }
    cvSet2D(img,i,j,s);
    @Ivory69: l'ordre dans la structure data c'est [B0 G0 R0 B1 G1 R1 B2 G2 ...]
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 47
    Points : 32
    Points
    32
    Par défaut
    Merci pseudocode, g t un peu perdu ça faisait longtemps que j'avais pas utilisé OpenCv. Maintenant ça me parait plus clair.
    Juste une remarque pour elenwe, ce serait peut etre plus simple de mettre les autres pixels en noir ou en blanc (0 ou 255), mais bon ça dépend si t'as d'autres test derrière .
    Bon courage @ tous
    @ +

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci a tous de mavoir repondu
    Jai neanmoins trouver la solution aux problemes inconnu en utilisant CvScalar, cvGet2D et cvSet2D.. merci a toi pseudocode qui a eu la bonne idée... C'est plus simple comme cela...

    Je traite une image pour detecter une zone rouge pour pouvoir faire des calculs de hauteur par la suite....merci a tous

  8. #8
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 50
    Points : 74
    Points
    74
    Par défaut
    Autre solution pour "lire" les pixels. Plus rapide je crois

    Jpierre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
         CvPoint pt = {pointX,pointY};
         uchar* pixel_ptr; 
     
         pixel_ptr  = &((uchar*)(frame->imageData + frame->widthStep*pt.y))[pt.x*3];
         pxBleu = pixel_ptr[0]; // ecriture >>> pixel_ptr[0]=pxBleu; 
         pxVert = pixel_ptr[1];
         pxRouge =pixel_ptr[2];
    Edit : Voir ici un exemple complet http://www.developpez.net/forums/sho...d.php?t=366832

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

Discussions similaires

  1. Gestion des couleurs dans un datagrid
    Par edophie dans le forum Flash
    Réponses: 4
    Dernier message: 07/11/2006, 11h08
  2. Export Excel - Gestion des couleurs
    Par Shansson dans le forum Access
    Réponses: 7
    Dernier message: 21/04/2006, 15h25
  3. [VB] gestion des couleurs des variables de type string
    Par landry005 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/03/2006, 14h36
  4. Réponses: 2
    Dernier message: 11/05/2005, 13h23
  5. [Debutant] gestion des couleurs ??
    Par MaxiMax dans le forum OpenGL
    Réponses: 5
    Dernier message: 26/03/2004, 08h34

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