• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ビットマップ画像の色取得のご相談)

ビットマップ画像の色取得

このQ&Aのポイント
  • WinXPでVC++2008ExpressEditionを使用してWinアプリケーションで画像処理をしようとしています.ビットマップのカラー画像を二値化(閾値判別分析法)するために,各色の抽出してグレースケール化を試みているのですが,エラーがとれないので,ご助言いただけたらなと思います.
  • ファイルを開くダイアログを表示し、選択した画像ファイルをピクチャーボックスに表示します.その後、ビットマップ画像の色を抽出し、グレースケール化します.
  • 質問者は、ビットマップ画像のカラー画像を二値化(閾値判別分析法)するために、各色の抽出してグレースケール化を試みているが、エラーが発生している。具体的なエラーメッセージやソースコードも提示されている。エラーの原因を特定し、修正する方法を教えてほしいという相談です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>/*この辺がエラーの原因だと思うのですが・・・*/ >color1 = bmp->GetPixel(i,j); 判ってんなら、何で気付かない? ループ変数をiとjじゃなく、yとxに書き変えてみれば、自分の愚かさに気付けると思うよ。 以下、ループ変数を書き換えたソース // 赤,緑,青成分の抽出 for( y = 1; y < 480; y++)//Y方向 //何で1から始めてるのか知らんが放置 { for( x = 1; x < 640; x++)//X方向 //何で1から始めてるのか知らんが放置 { ////////////////////////////////////////////// /*この辺がエラーの原因だと思うのですが・・・*/ color1 = bmp->GetPixel(y,x); R = color1.R; G = color1.G; B = color1.B; Image_in[y][x][0] = R; Image_in[y][x][1] = G; Image_in[y][x][2] = B; } } //RGB to Gray カラー画像をグレースケール化 for( y = 0; y < 480; y++)//Y方向 { for( x = 0; x < 640; x++)//X方向 { Y = 0.299*Image_in[y][x][0] + 0.587*Image_in[y][x][1] + 0.114*Image_in[y][x][2]; Gray[y][x] = Y; } } どう?気付いた? 気付けない場合は color1 = bmp->GetPixel(y,x); の行を「声に出して100回読んで」みよう。 それで解らなければ、BitmapオブジェクトのGetpixel()メソッドの関数仕様書を「声に出して100回読んで」みよう。 あと「ループ変数にi,jを使う」などと言うアフォな慣例には従わないこと。 変数に「X座標」とか「Y座標」とかの意味があるなら、変数名は「x」とか「y」とかにするべき。 本当は「PixelPosX」とか「PixelPosY」とか、見て解る名前にすんのが良いけどね。

kanemaru_okweb
質問者

お礼

chie65535さま 懇切丁寧に教えて頂きまして誠にありがとうございました.また些細なことでお聞きして申し訳ございませんでした.無事グレースケール化することができました.

その他の回答 (1)

回答No.1

どういうサイズの画像を処理しているのでしょう? ソースコードからは横480×縦640の画像を処理しているように見えますが、読み込んだ画像のサイズがこれと違う(例えば横640×縦480)画像サイズなら、ピクセルの指定範囲が画像の範囲を飛び出すのでエラーが発生します。

kanemaru_okweb
質問者

お礼

magicalpassさま ご指摘いただきまして誠にありがとうございます.画像処理は横640×縦480でした・・・この部分でも勘違いをしておりました.本当にありがとうございました.

関連するQ&A