2017-03-06 3 views
1

白黒の.bmpを読み取り、各ピクセルの灰色(0〜255)のレベルでヒストグラムを作成するCまたはC++(C言語の設定)でプログラムを実行する必要があります。 私は助けてくれるライブラリを探してみましたが、これまでは何も見つけられず、始まりませんでした。 これで誰もが私を導くことができますか?私はC言語での知識は事実上ありません。これはこの言語で行われなければなりません。 OpenCVとこのImageClass.hライブラリを見たことがありますが、何も助けにはなりません。 私はどのように始めるべきですか、誰かが実際にこれを行うために勉強するのに役立つ資料がありますか?.bmpでの処理

+0

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+0

この種の質問は明示的に_off-topic_ここにあります。この[ヘルプセンターの記事](http://stackoverflow.com/help/on-topic)からポイント4を読んでください。 –

+0

ヒント: 'int freq [256];' – user4581301

答えて

1

C++でbmpファイルから個々のピクセルデータを取得するには、ライブラリを使用する方がはるかに簡単です。つまり、stb_imageは、さまざまなイメージファイルを読み込むためのヘッダー専用ライブラリを使用するのが非常に簡単です。しかし、同じことをすることができる他の多くのライブラリがあります(つまり、ウィンドウ上にある場合はCImgCBitmapFreeImage、...)。 OpenCVは画像を読み込むことができますが、はるかに複雑なタスクも実行できます。つまり、画像データにさまざまな共通アルゴリズムを適用できます。単純なヒストグラムを計算するだけでは、OpenCVはおそらく過剰です。

配列のような構造のbmpファイルから生のピクセルデータにアクセスできたら、ヒストグラムを計算するのは簡単です:すべてのピクセルをループし、色の値に応じてカウンタを増やすだけです。グレースケール画像の場合は、0(黒色)、255(白色)、またはその間の任意の値になります。ヒストグラムは、すべての可能な色のピクセルの頻度です。

#define STB_IMAGE_IMPLEMENTATION 
#include "stb_image.h" 

int main(int argc, char* argv[]) { 
    int width, height, bpp; 
    unsigned char* pixels = stbi_load("grayscale.bmp", &width, &height, &bpp, 1); 
    int histogram[256] = { 0 }; 
    for (int y = 0; y < height; y++) { 
    for (int x = 0; x < width; x++) { 
     histogram[pixels[x + y * height]]++; 
    } 
    } 
    stbi_image_free(pixels); 
    return 0; 
} 
+0

ありがとうございましたOpenCV。あなたが推薦したものを試してみてください。再度、感謝します。 –

+0

@RodrigoDiasよろしくお願いします!答えがあなたに役立つ場合は、回答の左側にあるチェックマークをクリックして、受け入れられた回答としてマークしてください。ありがとうございました! – Constantin

関連する問題