2010-01-18 2 views
1

J'utilise CImg pour mon travail de traitement d'image. Je ne travaille actuellement que sur les images JPG, BMP, TIFF en niveaux de gris. Le problème auquel je suis confronté avec la fonction CImg est le suivant:Images à canal unique dans CImg

CImg stocke les valeurs Pixel de la manière suivante. R1R2R3R4 ............ G1G2G3G4 ......... B1B2B3B4 .........

Même pour les images en échelle de gris, 3 canaux différents sont créés séparément. Cela rend mon travail très compliqué. Juste pour copier des valeurs d'une image à l'autre, j'ai besoin de copier tous les composants des pixels. J'ai besoin de parcourir tous les canaux qui ralentissent mon algorithme. Étant donné que je ne travaille qu'avec des images en niveaux de gris, peu importe que je sois monocanal ou multichannel. Y a-t-il un moyen de convertir une image à 3 canaux en CImg à canal unique? S'il vous plaît laissez-moi savoir dès que possible.

Merci à tous à l'avance

Répondre

0

Si vous ne souhaitez que des images à un seul canal, vous pouvez aussi bien les enregistrer en tant que simple canal PGM images que CImg peut lire et écrire directement sans avoir besoin de bibliothèques supplémentaires:

#include "CImg.h" 
using namespace cimg_library; 
int main() { 
    // Load colour image 
    CImg<unsigned char> image("image.png"); 

    // Extract Red channel, which is same as Green and Blue in greyscale 
    image.channel(0); 

    // ALTERNATIVE TO PREVIOUS LINE IS TO USE LUMINANCE 
    // image.RGBtoYCbCr().channel(0); 

    // Save as single channel PGM file 
    image.save_pnm("result.pgm"); 
} 

Vous pouvez convertir le fichier PGM (Wikipedia description of PGM) à un JPEG ou PNG, ou TIFF avec ImageMagick:

convert result.pgm image.jpg 
convert result.pgm image.png 

Mots-clés: traitement d'images, traitement d'image, C++, bibliothèque, CImg, NetPBM, PBMplus, PBM, PGM, PPM, PAM, niveaux de gris, niveaux de gris, canal unique