0

Visual Studio 2010、C++ を使用しています。

私がやろうとしているのは、読み込まれた画像からピクセル データ (具体的には RGB カラー) を取得し、それをさまざまなチェックで使用することです。現在、すべてのデータをループして、ピクセルが特定の色 (特定の R、G、および B 値) であることを検出できるようにしたいと考えています。

私は DevIL を使用していることに注意してください。DevIL を使い続けたいと思っています (画像処理に役立つ他のツールを使用するための多くの提案を見てきました)。

現在、私が理解しているように、DevIL 関数 ilgetData() は、バイトの 1 次元配列内のすべてのピクセルのすべての RGB 値を持つポインターを取得します。この関数を使用して取得したデータを格納し、それを for ループで使用する方法がわかりません。

サンプルコードは大歓迎です。

4

1 に答える 1

5

ilGetData() の戻り値を格納する正しい方法は、IL の符号なしバイト配列です。

例えば

ILubyte * bytes = ilGetData();

使用する for ループで反復処理するには

  for(int i = 0; i < size; i++)
  {
    // Print out each ILubyte one at time
    printf("%d\n", bytes[ i ]);
  }

おそらく必要なのは、画像内のすべてのピクセルの指定されたピクセルの RGB 値を印刷または実行する for ループです。Bart が指摘したように、以下の順序は IL_RGBA または RGBA 形式用です。IL_RGB を使用する場合、4 は 3 になり、IL_BGR または IL_BGRA を使用する場合は、赤と青の値を期待どおりに切り替える必要があります。

ILuint width,height;
width = ilGetInteger(IL_IMAGE_WIDTH);
height = ilGetInteger(IL_IMAGE_HEIGHT);

for (int i = 0; i < height; i++)
{
   for (int j = 0; j < width; j++)
   {
      printf( "%s\n", "Red Value for Pixel");
      printf( "%d\n", bytes[(i*width + j)*4 + 0]); 
      printf( "%s\n", "Green Value for Pixel");
      printf( "%d\n", bytes[(i*width + j)*4 + 1]);
      printf( "%s\n", "Blue Value for Pixel");
      printf( "%d\n", bytes[(i*width + j)*4 + 2]);
   }
}
于 2012-02-06T20:33:36.160 に答える