Accés aux pixelx d'une image

noussagh Messages postés 22 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 20 mai 2011 - 1 mars 2011 à 18:16
raikko21 Messages postés 33 Date d'inscription jeudi 30 septembre 2010 Statut Membre Dernière intervention 24 novembre 2011 - 26 mars 2011 à 13:17
Bonjour

je sais pas si je suis dans le bon thème pour ma question.j'aimerai savoir comment accéder aux pixels de mon image qui a été chargée avec OpenCv. je veux pas utiliser les fonctions de openCv je veux développer le code moi même.j'ai defini uchar * data = (uchar *)image_ref->imageData; . ce que je veux savoir est ce que data[i] correspond a la valeur du pixel sachant que mon image est en couleur.
en faite j'aimerai charger les pixels de mon image couleur dans un tableau pour pouvoir en faire une transformation est obtenir une image au niveau gris.
merci pour toute reponse :)

4 réponses

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
2 mars 2011 à 08:47
Salut

Je n'ai jamais véritablement travaillé sur OpenCV, mais voici quelques remarques générales: data est un pointeur sur un tableau 1D ou sont stoker l'ensemble des pixels. Cependant, les pixels peuvent être de plusieurs type et le nombre de canaux peut aussi varier. En générale pour une image couleur, il y a 3 canaux R V B. Concrètement, si ton image est en 8 bits:
data[0] pixel 0 canal Bleu
data[1] pixel 0 canal Vert
data[2] pixel 0 canal Rouge
data[3] pixel 1 canal Bleu
...


A+

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
0
noussagh Messages postés 22 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 20 mai 2011 1
2 mars 2011 à 12:22
Merci d'avoir pris la peine de me repondre :)
en faite j'ai suivi ce que tu m'as dit et j'ai rempli une matrice avec les composantes BGR de chaque pixel ( i = le numero du pixel et j la composante)
  k=0;
          for (i = 0; i < width*height; i+=1)
  {
  for (j=0;j<3;j+=1)
  {
  mat[i][j]=data[k];
  printf("%d\t",mat[i][j] );
  k=k+1;
  
  }
  printf("\n");
  }


bon j'ai une autre question , comment je determine la valeur du pixel a partir des trois composants, est ce que c'est la somme?
et pour transformer au niveau gris quelle formule utiliser:
* gris= (rouge+vert+bleu)\3
* gris= 0.299 * rouge+ 0.587*vert + 0.114*bleu
* gris = 0.2125 *rouge+ 0.7154*vert + 0.0721*bleu

merci
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
2 mars 2011 à 12:34
Moi j'utilise souvent seconde méthode. (Rec601)

Sinon, c'est le bon principe, a partir des 3 composantes RGB, tu obtiens une valeur que tu attributs au pixel.

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
0
raikko21 Messages postés 33 Date d'inscription jeudi 30 septembre 2010 Statut Membre Dernière intervention 24 novembre 2011
26 mars 2011 à 13:17
Salut a tous!!!

Apparemment tu as réussi a récupérer ta matrice de pixel, maintenant pour obtenir la matrice en niveau de gris ce que tu dois savoir c'est que ton pixel contient deux information la luminance (intensité lumineuse correspond au niveau de gris si tu veux) et la chrominance qui est en relation avec la fréquence(longueur d'onde c'est l'information de la couleur).
Bref, tu commence par calculer la luminance que tu as appeler gris par la formule, gris=(0.59*G+0.30*R+0.11*B). Maintenant il te suffit de remplir ta matrice avec les valeur de ton gris et tu la converti en image.

N.B:
1- Pour une image en noir est blanc (niveaux de gris) R=G=B=y; y est la luminance (ce que tu as appelé gris)
exemple: R=230; G=230; B=230 est un gris clair, R=G=B=20 est un gris fonce.....

2- la relation (0.59*G+0.30*R+0.11*B) a été calculée a partir de la courbe de sensibilité relative de l'œil.
0
Rejoignez-nous