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 はおそらく最も使いやすいライブラリの 1 つです。提供されているサンプル ファイル (フォルダーCImg/examples/ ) を見て、全体がどのように機能しているかを確認します (特にCImg/examples/tutorial.cpp )。

于 2013-02-22T19:28:07.447 に答える
0

サードパーティのライブラリを使い始めるには、次のようなチュートリアルから始めると便利です: CImg チュートリアル

特に、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 に答える