Modifier une image couleur en niveaux de gris (8 bits par pixel)

DjAdes
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011
- 8 nov. 2005 à 10:09
DjAdes
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011
- 9 nov. 2005 à 19:50
Bonjour,

Je désirerais modifier une image couleur (24 ou 32 bits) en une image niveaux de gris (8 bits par pixels).

J'ai réussi pour l'instant à modifier une image 24 bits en niveaux de
gris en remplacant les trois couleurs par la formule : (0.299 * red) +
(0.587 * green) + (0.114 * blue). Le résultat est bon mais mon image
est toujours en 24 bit, ce qui est un peu redondant.

Je voudrais donc modifier mon image 24 bits en une image 8 bits (qui
sera plus facile à manipuler pour l'application de filtres).



Merci d'avance pour vos réponses,

A bientôt,

Seb.
A voir également:

11 réponses

bucherb
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007

8 nov. 2005 à 10:19
Utilise la propriété PixelFormat de ton image
-------------------------
Trambert le vert
0
DjAdes
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011

8 nov. 2005 à 10:33
Le problème est le suivant : il y a bien une propriété
Format8bppIndexed mais comme son nom l'indique, les couleurs (ou les
niveaux) sont indexées. Pour effectuer les traitements sur l'image, il
est préférable de ne pas avoir une image dont les pixels sont indexés.
C'est ce que je recherche : une conversion vers une image 8 bits non
indexée.



Seb.
0
bucherb
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007

8 nov. 2005 à 10:37
Et si tu fais tes traitements avant et que tu converti ensuite?
Je suis pas un expert en image, qu'est-ce que ça signifie les "niveaux de couleurs indexés" ?

-------------------------
Trambert le vert
0
DjAdes
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011

8 nov. 2005 à 11:05
Lorsque les couleurs sont indexées, l'image utilise une palette de
couleurs. Cette palette peut être de taille variable et contenir soit
des niveaux de gris soit des couleurs.

Comme tu le sais chaque pixel est représenté par une couleur, lorsque
celle-ci est indexée, le pixel contient la position de la couleur dans
la palette.

Contrairement aux images "classiques" où le pixel contient directement la valeur de la couleur.

De par ce fait, lorsque les couleurs sont indexées il est difficile de traiter les images en modifiant directement le pixel.



J'espère que je suis assez clair.

Merci encore pour ton intérêt à ma question,

Seb.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bucherb
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007

8 nov. 2005 à 11:06
Ouais je vois.. Merci.. Et en passant par un 16bppGrayScale?

-------------------------
Trambert le vert
0
DjAdes
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011

8 nov. 2005 à 11:38
J'ai essayé ca aussi mais sans succès .



Seb.
0
Lutinore
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Membre
Dernière intervention
27 octobre 2012
42
9 nov. 2005 à 00:17
Salut,

private void GrayScale( )
{
bmp = new Bitmap( "Lena.jpg" );
gray = new Bitmap( bmp.Width, bmp.Height, PixelFormat.Format16bppRgb555 ); // Ou 565.


int rgb;
Color pixel;


for ( int x = 0; x < bmp.Width; x++ )
{
for ( int y = 0; y < bmp.Height; y++ )
{
pixel = bmp.GetPixel( x, y );
// Ou ça : rgb = ( int )( pixel.R + pixel.G + pixel.B ) / 3;
rgb = ( int )( pixel.R * 0.3 + pixel.G * 0.59 + pixel.B * 0.11 );
gray.SetPixel( x, y, Color.FromArgb( rgb, rgb, rgb ) );
}
}


//gray.Save( "Gray.bmp", ImageFormat.Bmp );
}

J'imagine que ça dépend peut être du format mais pour moi une image 8bpp ça signifie une image indexée. Si tu veux quelque chose de rapide pour appliquer des filtres il faudra passer par les pointeurs.
0
MorpionMx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
56
9 nov. 2005 à 17:53
Tiens, Lutinore travaille avec Lena

http://www.csharpfr.com/code.aspx?ID=28945

Mx
0
Lutinore
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Membre
Dernière intervention
27 octobre 2012
42
9 nov. 2005 à 18:43
Je travaille toujours avec Lena et si tu as bonne mémoire tu le sais déja

http://www.csharpfr.com/forum.v2.aspx?ID=504389
0
MorpionMx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
56
9 nov. 2005 à 18:51
Yep, tres juste, je me souvenais avoir eu cette conversation, mais j'etais plus sur que ce soit avec toi

Mx
0
DjAdes
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011

9 nov. 2005 à 19:50
Pour répondre à Lutinore :

Voici ce que j'entends par image 8 bits non-indexé en niveaux de gris : 1 octet = 256 niveaux de gris possibles.

Maintenant tu me fais hésiter. Est-ce possible d'avoir des images 8 bits non indexées ?



Si l'on considère une image 8 bits indexée, comment appliquer les
matrices directement sur les pixels ? Faut-il aller rechercher la
valeur du pixel dans la palette ?



Seb.
0