Modifier une image couleur en niveaux de gris (8 bits par pixel)
DjAdes
Messages postés38Date d'inscriptionvendredi 31 mai 2002StatutMembreDernière intervention 6 juillet 2011
-
8 nov. 2005 à 10:09
DjAdes
Messages postés38Date d'inscriptionvendredi 31 mai 2002StatutMembreDerniè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:
Programme qui transforme une image couleur en une image en niveau de gris
DjAdes
Messages postés38Date d'inscriptionvendredi 31 mai 2002StatutMembreDerniè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.
bucherb
Messages postés412Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention13 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" ?
DjAdes
Messages postés38Date d'inscriptionvendredi 31 mai 2002StatutMembreDerniè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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 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.
DjAdes
Messages postés38Date d'inscriptionvendredi 31 mai 2002StatutMembreDerniè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 ?