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

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

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

2

Решение

Сначала определите ваше изображение:

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");

когда с == 0, Вы будете заполнять красный канал вашего изображения, когда с == 1, зеленый и когда с == 2 синенький. Ничего особо сложного.

Я экспериментировал с большим количеством библиотек обработки изображений, и CImg, вероятно, является одним из самых простых в использовании. Посмотрите на предоставленные примеры файлов (папка CImg / примеры /) чтобы увидеть, как все это работает (особенно CImg / примеры / tutorial.cpp).

3

Другие решения

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

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

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

Чтобы начать, ** познакомьтесь с CImg учебный класс. Тогда продвигайтесь, как того требует ваша необходимость …

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;
0
По вопросам рекламы [email protected]