преобразовать изображение rgb в матрицу, используя библиотеку C++ и Cimg

У меня есть этот проект в слепом разделении источников, где мне нужно представить изображение RGB в матрице, используя Cimg. но я не могу понять, как использовать Cimg. Я просмотрел документацию в

Но там СЛИШКОМ много функций, и я не мог понять, какую из них использовать! их действительно слишком много. Я никогда не использовал Cimg, поэтому, если кто-нибудь может объяснить мне, какой должна быть моя процедура, сделайте это! Я программирую на С++ и использую eclipse. Спасибо!


person zahi daoui    schedule 16.02.2013    source источник


Ответы (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).

person bvalabas    schedule 22.02.2013

Приступая к работе с любой сторонней библиотекой, я считаю полезным начать с руководства, подобного этому: CImg Учебник

Особенно, если вы новичок в C++/программировании в целом.

Не расстраивайтесь из-за богатства интерфейса или объема кода. Придерживайтесь того, что вы ищете, и пусть Google будет вашим другом.

Для начала **познакомьтесь с классом CImg. Затем продвигайтесь по мере необходимости...

person eladidan    schedule 16.02.2013

Если вас не заставляют использовать 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;
person SGH    schedule 16.02.2013