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

Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011
- - Dernière réponse : 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.
Afficher la suite 

11 réponses

Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007
0
Merci
Utilise la propriété PixelFormat de ton image
-------------------------
Trambert le vert
Commenter la réponse de bucherb
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011
0
Merci
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.
Commenter la réponse de DjAdes
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007
0
Merci
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
Commenter la réponse de bucherb
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011
0
Merci
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.
Commenter la réponse de DjAdes
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007
0
Merci
Ouais je vois.. Merci.. Et en passant par un 16bppGrayScale?

-------------------------
Trambert le vert
Commenter la réponse de bucherb
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011
0
Merci
J'ai essayé ca aussi mais sans succès .



Seb.
Commenter la réponse de DjAdes
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
0
Merci
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.
Commenter la réponse de Lutinore
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
41
0
Merci
Tiens, Lutinore travaille avec Lena

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

Mx
Commenter la réponse de MorpionMx
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
0
Merci
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
Commenter la réponse de Lutinore
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
41
0
Merci
Yep, tres juste, je me souvenais avoir eu cette conversation, mais j'etais plus sur que ce soit avec toi

Mx
Commenter la réponse de MorpionMx
Messages postés
38
Date d'inscription
vendredi 31 mai 2002
Statut
Membre
Dernière intervention
6 juillet 2011
0
Merci
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.
Commenter la réponse de DjAdes