使用C ++和Cimg库将rgb图像转换为矩阵

时间:2013-02-16 20:18:45

标签: c++ rgb cimg

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

中的文档

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

3 个答案:

答案 0 :(得分:3)

首先定义你的形象:

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 )。

答案 1 :(得分:0)

开始使用任何第三方库,我发现从教程开始很有用,例如:CImg Tutorial

特别是如果您不熟悉C ++ /编程。

不要对界面的丰富程度或代码量感到沮丧。坚持你想要的东西,让谷歌成为你的朋友。

为了帮助您入门,**熟悉CImg课程。然后根据你的需要提前......

答案 2 :(得分:0)

如果你没有被强制使用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;