7
CImg<unsigned char> src("image.jpg");
int width = src.width();
int height = src.height();
unsigned char* ptr = src.data(10,10); 

rgbからどうやって入手できptrますか?

4

4 に答える 4

7

次のように保存された手作りの 3x3 RGB イメージを使用して Ubuntu 10.04 でテスト済みtest.png:

sudo apt-get インストール cimg-dev

ソースファイルcimg_test.cpp:

#include <iostream>
using namespace std;

#include <CImg.h>
using namespace cimg_library;

int main()
{
    CImg<unsigned char> src("test.png");
    int width = src.width();
    int height = src.height();
    cout << width << "x" << height << endl;
    for (int r = 0; r < height; r++)
        for (int c = 0; c < width; c++)
            cout << "(" << r << "," << c << ") ="
                 << " R" << (int)src(c,r,0,0)
                 << " G" << (int)src(c,r,0,1)
                 << " B" << (int)src(c,r,0,2) << endl;
    return 0;
}

コンパイルして実行します。

g++ cimg_test.cpp -lX11 -lpthread -o cimg_test

./cimg_test
3x3
(0,0) = R0 G0 B0
(0,1) = R255 G0 B0
(0,2) = R0 G255 B0
(1,0) = R0 G0 B255
(1,1) = R128 G128 B128
(1,2) = R0 G0 B128
(2,0) = R128 G0 B0
(2,1) = R0 G128 B0
(2,2) = R255 G255 B255

できます。

于 2010-07-20T21:25:09.800 に答える
4

CImg ドキュメント(34 ページのセクション 6.13、および 120 ページのセクション 8.1.4.16) から、このメソッドはx、y、z、および c の4 つの引数dataを取ることができるようです。

T* data(const unsigned int x, const unsigned int y = 0, 
        const unsigned int z = 0, const unsigned int c = 0)

...ここでc、カラー チャネルを参照します。画像が実際に RGB 画像である場合、0、1、または 2 の値を使用するとc、特定の場所で赤、緑、および青のコンポーネントが得られると思いますx, y

例えば:

unsigned char *r = src.data(10, 10, 0, 0);
unsigned char *g = src.data(10, 10, 0, 1);
unsigned char *b = src.data(10, 10, 0, 2);

(ただし、これはあくまでも推測です!)

編集:

同様の方法で動作する CImg の operator() もあるようです。

unsigned char r = src(10, 10, 0, 0);
于 2010-07-20T16:23:36.190 に答える
-1

@wamp: CImg についてはわかりませんが、RGB のグレースケール画像には次のものがあります。

R = G = B

そしてCMYKで:

C = M = Y = 0

K = 輝度

そのための関数さえ必要ありません...

于 2010-07-23T15:30:06.717 に答える