首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C++和Cimg库将rgb图像转换为矩阵

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

Stack Overflow用户
提问于 2013-02-17 04:18:45
回答 3查看 4.5K关注 0票数 2

我有一个盲源分离的项目,我需要使用Cimg在矩阵中表示RGB图像。但是我不能真正理解如何使用Cimg..我已经浏览了

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

EN

回答 3

Stack Overflow用户

发布于 2013-02-23 03:28:07

首先定义你的镜像:

代码语言:javascript
复制
CImg<float> img(320,200,1,3);  // Define a 320x200 color image (3 channels).

然后用你的数据填充它:

代码语言:javascript
复制
cimg_forXYC(img,x,y,c) {  // Do 3 nested loops
   img(x,y,c) = pixel_value_at(x,y,c); 
}

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

代码语言:javascript
复制
img.display("Display my image");

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

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

票数 3
EN

Stack Overflow用户

发布于 2013-02-17 04:31:58

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

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

不要对丰富的接口或大量的代码感到沮丧。坚持你正在寻找的东西,让谷歌成为你的朋友。

首先,**熟悉CImg类。然后按照你的需求前进。

票数 0
EN

Stack Overflow用户

发布于 2013-02-17 06:41:34

如果你不是被迫使用CImg,我建议你使用DevIL,一个工作代码的例子如下所示:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14914709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档