2

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

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

4

3 回答 3

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

于 2013-02-22T19:28:07.447 回答
0

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

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

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

为了让你开始,**熟悉CImg课程。然后根据您的需要前进...

于 2013-02-16T20:31:58.277 回答
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;
于 2013-02-16T22:41:33.500 回答