2012-02-06 20 views
0

私はVisual Studio 2010、C++を使用しています。Devilを使用して画像から取得したピクセルデータを使用する

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

私はDevILを使用していることに注意してください。私はDevILを使い続けたいと考えています(私は、画像処理に役立つ他のツールとのやり取りについてたくさんの提案を見てきました)。

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

例コードは大変ありがとうございます。

答えて

5

ilGetData()の戻り値を格納する正しい方法は、IL符号なしバイト配列です。あなたは何をあなたはおそらくしたいことは与えられた時のRGB値との何か他のものを印刷したりしためのループである

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

を使用forループでそれを反復する例

ILubyte * bytes = ilGetData(); 

については

画像内のすべてのピクセルのピクセル。 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]); 
    } 
} 
+0

あなたの例では、RGBAをフォーマットと仮定しています。 – Bart

+0

ありがとうございます。あなたは私のために1週間の検索をほぼ完了しました。コード例は非常に高く評価されています。再度、感謝します。 – Rohit

関連する問題