2011-05-09 2 views
2

Lorsque j'utilise CImg pour charger un .BMP, comment puis-je savoir s'il s'agit d'une image en niveaux de gris ou en couleurs? J'ai essayé comme suit, mais a échoué:CImg: Comment enregistrer une échelle de gris?

cimg_library::CImg<unsigned char> img("lena_gray.bmp"); 

const int spectrum = img.spectrum(); 

img.save("lenaNew.bmp"); 

Pour mes attentes, peu importe quel genre de .BMP j'ai chargé, le spectre sera toujours 3. En conséquence, lorsque je charge un gris-échelle et sauver la taille du résultat sera 3 fois plus grande que ce qu'elle est. Je veux juste sauvegarder une même image quand elle est chargée. Comment puis-je sauvegarder en mode gris?

Répondre

1

Je suppose que le format BMP stocke toujours les images en tant que données codées en RVB, de sorte que la lecture d'un BMP entraînera toujours une image couleur. Si vous savez que votre image est scalaire, tous les canaux seront les mêmes, donc vous pouvez en défausser deux (ici en gardant le premier).

img.channel(0); 

Si vous voulez vérifier qu'il est une image scalaire, vous pouvez tester l'égalité entre les canaux, comme

const CImg<unsigned char> R = img.get_shared_channel(0), 
          G = img.get_shared_channel(1), 
          B = img.get_shared_channel(2); 
if (R==G && R==B) { 
    .. Your image is scalar ! 
} else { 
    .. Your image is in color. 
} 
+0

Ce n'est pas toujours vrai. Parfois, les valeurs sont différentes. Les ratios sont censés être les mêmes. c'est-à-dire que l'on pourrait calculer la saturation de chaque pixel et l'utiliser comme indicateur. – zehelvion

Questions connexes