• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:被写体のHSVを正確に取得(webcam,C++))

被写体のHSVを正確に取得する方法とは?

このQ&Aのポイント
  • VC++のOpenCVを使ったwebカメラ情報の取得方法を紹介します。
  • 被写体のHSVコードを正確に認識するための補正手法について知りたいです。
  • C++で扱えるライブラリやwebカメラの調整ソフトウェアについて相談したいです。

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

  • ベストアンサー
  • kirinoma
  • ベストアンサー率53% (288/542)
回答No.1

こんにちは.  いろいろな照明環境において,画像自体を単一に補正するのは難しいと思いますよ. 人工光でも蛍光灯・LED灯・白熱電球で変わりますし,太陽光もまた変化の仕方が違います. その他では,4通りくらいの対処方法が考えられます. 1.色キャリブレーションを入れる.  プログラム起動前にスクリーンの中央にマレットを保持しておく. プログラムの起動時に,中心の画素値(HSV値)を読み取り,その環境でのHSVコードを作成する. (マウスクリックで画素値を取得して,随時キャリブレーション出来る様にしてもいいですね) 2.SVの判定に幅を持たせる.  照明変動環境下では,主に彩度と明度が変動してしまうので, これらはかなりの幅を持たせて判定します. 色相(H)で絞り込みましょう. (ただし,イルミネーションの様に光に色が付いていると厳しいですが) 3.色の他にパターンを組み合わせる.  2で判定に幅を持たせると,マレット以外の部分も検出してしまう場合があります. これを防ぐために,パターンを組み合わせます. a.2色パターン  マレットを2色で半分半分に塗ります.(出来ればH色相環で遠い色同士) 今までの判定を2回,2色で行い,ある程度の大きさを持ちつつ近い位置で 検出された組合せをマレットとします. b.図形パターン  丸などの図形をマレットに書いておきます.今まで通り1色で位置を決めた後, その場所に図形があるか判定します. 4.追跡情報を活用する.  初期位置を決めておき,座標を次のフレームまで保持しておきます. 次のフレームでは,前のフレームでの位置に近い位置しか検出処理しない事により, 位置精度を高めます. (左端(もしくは右端)からマレットが動かないなら,単純に左端の縦1ラインを 上から下に走査して,何であれHSV値がある程度変化したら,そこがマレットの位置, としてもこのアプリなら成立しそうな気はします) 以上,参考になりましたら幸いです.

berina
質問者

お礼

今後、色付きのツナギを着て色領域を取らせる、複数プレイヤーでやらせる、事を考えています。 ですので最後の補足、色パターンは実装が難しそうですが、 それ以外は是非やってみたいと思います。 適切な回答をありがとうございます。

関連するQ&A