- ベストアンサー
被写体のHSVを正確に取得する方法とは?
- VC++のOpenCVを使ったwebカメラ情報の取得方法を紹介します。
- 被写体のHSVコードを正確に認識するための補正手法について知りたいです。
- C++で扱えるライブラリやwebカメラの調整ソフトウェアについて相談したいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは. いろいろな照明環境において,画像自体を単一に補正するのは難しいと思いますよ. 人工光でも蛍光灯・LED灯・白熱電球で変わりますし,太陽光もまた変化の仕方が違います. その他では,4通りくらいの対処方法が考えられます. 1.色キャリブレーションを入れる. プログラム起動前にスクリーンの中央にマレットを保持しておく. プログラムの起動時に,中心の画素値(HSV値)を読み取り,その環境でのHSVコードを作成する. (マウスクリックで画素値を取得して,随時キャリブレーション出来る様にしてもいいですね) 2.SVの判定に幅を持たせる. 照明変動環境下では,主に彩度と明度が変動してしまうので, これらはかなりの幅を持たせて判定します. 色相(H)で絞り込みましょう. (ただし,イルミネーションの様に光に色が付いていると厳しいですが) 3.色の他にパターンを組み合わせる. 2で判定に幅を持たせると,マレット以外の部分も検出してしまう場合があります. これを防ぐために,パターンを組み合わせます. a.2色パターン マレットを2色で半分半分に塗ります.(出来ればH色相環で遠い色同士) 今までの判定を2回,2色で行い,ある程度の大きさを持ちつつ近い位置で 検出された組合せをマレットとします. b.図形パターン 丸などの図形をマレットに書いておきます.今まで通り1色で位置を決めた後, その場所に図形があるか判定します. 4.追跡情報を活用する. 初期位置を決めておき,座標を次のフレームまで保持しておきます. 次のフレームでは,前のフレームでの位置に近い位置しか検出処理しない事により, 位置精度を高めます. (左端(もしくは右端)からマレットが動かないなら,単純に左端の縦1ラインを 上から下に走査して,何であれHSV値がある程度変化したら,そこがマレットの位置, としてもこのアプリなら成立しそうな気はします) 以上,参考になりましたら幸いです.
お礼
今後、色付きのツナギを着て色領域を取らせる、複数プレイヤーでやらせる、事を考えています。 ですので最後の補足、色パターンは実装が難しそうですが、 それ以外は是非やってみたいと思います。 適切な回答をありがとうございます。