首页 文章

CImg中的单通道图像

提问于
浏览
1

我使用CImg进行图像处理工作 . 我目前只使用Gray Scale JPG,BMP,TIFF图像 . CImg功能面临的问题如下:

CImg以下列方式存储Pixel值 . R1R2R3R4 ............ G1G2G3G4 ......... ......... B1B2B3B4

即使对于灰度图像,也会分别创建3个不同的通道 . 这使我的工作变得非常复杂 . 只是为了将值从一个图像复制到另一个图像,我需要复制像素的所有组件 . 我需要遍历所有使我的算法变慢的通道 .

因为我只使用灰度图像,所以无论是单通道还是多通道都无关紧要 . 有没有办法将3通道图像转换为单通道CImg . 请尽快告诉我 .

谢谢大家

2 回答

  • 0

    使用 CImg::channel(int c) 函数:

    CImg<float> img("input.jpg"); //3 channel
    img.channel(0); //now single channel
    img.save("output.jpg"); //will save as a 3 channel image again
    

    http://cimg.sourceforge.net/reference/structcimg__library_1_1CImg.html#a83af84298188d07c59c49dd0ed4d2714

  • 1

    如果您只对单通道图像感兴趣,您可以将它们保存为单通道 PGM 图像, CImg 可以直接读取和写入,而无需任何其他库:

    #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");
    }
    

    您可以稍后将 PGM 文件(Wikipedia description of PGM)转换为 JPEG ,或 PNG ,或 TIFFImageMagick

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

    Keywords :图像处理,图像处理,C,库,CImg,NetPBM,PBMplus,PBM,PGM,PPM,PAM,灰度,灰度,单通道

相关问题