我在盲源分离中有这个项目,我需要使用Cimg在矩阵中表示RGB图像。但我实际上无法理解如何使用Cimg ..我已经查看了
中的文档但是有很多功能,我无法知道使用哪一个!真的太多了。我从未使用过Cimg,所以如果有人能向我解释我的手术应该做什么! 我正在用C ++编程并使用eclipse。 谢谢!
答案 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;