【问题标题】:convert an rgb image into a matrix using C++ and Cimg library使用 C++ 和 Cimg 库将 rgb 图像转换为矩阵
【发布时间】:2013-02-16 20:18:44
【问题描述】:

我在盲源分离中有这个项目,我需要使用 Cimg 在矩阵中表示 RGB 图像。但我实际上无法理解如何使用 Cimg.. 我查看了文档中的

但是功能太多了,我不知道该用哪一个!真的太多了。我从未使用过 Cimg,所以如果有人可以向我解释我的程序应该是什么,请做! 我正在使用 C++ 编程并使用 eclipse。 谢谢!

【问题讨论】:

    标签: c++ rgb cimg


    【解决方案1】:

    首先定义你的形象:

    CImg<float> img(320,200,1,3);  // Define a 320x200 color image (3 channels).
    

    然后用你的数据填充它:

    cimg_forXYC(img,x,y,c) {  // Do 3 nested loops
       img(x,y,c) = pixel_value_at(x,y,c); 
    }
    

    然后你可以用它做任何你想做的事情。

    img.display("Display my image");
    

    c==0 时,您将填充图像的红色通道,c==1 时,绿色通道和 c== 2 蓝色的。没什么难的。

    我试验了很多图像处理库,CImg 可能是最容易使用的库之一。查看提供的示例文件(文件夹 CImg/examples/)以了解整个过程是如何工作的(尤其是 CImg/examples/tutorial.cpp)。

    【讨论】:

      【解决方案2】:

      开始使用任何 3rd 方库,我发现从一个教程开始很有用,比如这个:CImg Tutorial

      特别是如果您是 C++/一般编程的新手。

      不要对丰富的界面或大量的代码感到沮丧。坚持您正在寻找的内容,让 Google 成为您的朋友。

      为了让您入门,**熟悉 CImg 类。然后根据您的需要前进...

      【讨论】:

        【解决方案3】:

        如果您不强制使用 CImg,我建议您使用 DevIL,工作代码示例如下:

        ilLoad();
        ILuint image = 0;
        ilGenImages(1,&image);
        if(!image)
        {
            // Error
        }
        ilBindImage(image);
        if(!ilLoadImage("yourimage.png"))
        {
            // Error
        }
        // 4-bytes per pixel for RGBA
        ILuint width = ilGetInteger(IL_IMAGE_WIDTH);
        ILuint height = ilGetInteger(IL_IMAGE_HEIGHT);
        unsigned char* data=width*height*4;
        
        ilCopyPixels(0,0,0,width,height,1,IL_RGBA,IL_UNSIGNED_BYTE,data);
        
        ilDeleteImages(1,&image);
        image = 0;
        
        // now you can use 'data' as a pointer to all your required data.
        // You can access from data[0] up to data[ (width*height*4) - 1].
        // First pixel's red value: data[0]
        // Second pixel's green value: data[1 + (4 * 1)]
        // Third pixel's alpha value: data[3 + (4 * 2)]
        
        // Once you're done...
        delete[] data;
        data = 0;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-09
          • 2020-01-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-29
          • 1970-01-01
          相关资源
          最近更新 更多