プロが教える店舗&オフィスのセキュリティ対策術

環境: Visual C++ 2010 Express, OpenCV2.1-0

VC++において、OpenCVを通してwebカメラの情報を取得しています。
更にそこからある範囲のHSV領域を抜き出すという処理を行なっているのですが、

照明などが変わると、被写体のHSVコードを正しく認識しなくなる事が起きるのです。
その補正を行いたいのですが、手法がわかりません。

C++で扱えるライブラリや、webカメラの調整を行えるソフトウェアは無いものでしょうか。
OpenCVでは、明度輝度など画像データの編集が出来るので(あまり複雑でなければ)僕自身が実装する事も可能です。

何を目的としているかは、以下のURLを見て頂ければ判ると思います。
URL: http://www.nicovideo.jp/watch/sm17425165

よろしくお願いします。

A 回答 (1件)

こんにちは.



 いろいろな照明環境において,画像自体を単一に補正するのは難しいと思いますよ.
人工光でも蛍光灯・LED灯・白熱電球で変わりますし,太陽光もまた変化の仕方が違います.
その他では,4通りくらいの対処方法が考えられます.


1.色キャリブレーションを入れる.

 プログラム起動前にスクリーンの中央にマレットを保持しておく.
プログラムの起動時に,中心の画素値(HSV値)を読み取り,その環境でのHSVコードを作成する.
(マウスクリックで画素値を取得して,随時キャリブレーション出来る様にしてもいいですね)


2.SVの判定に幅を持たせる.

 照明変動環境下では,主に彩度と明度が変動してしまうので,
これらはかなりの幅を持たせて判定します.
色相(H)で絞り込みましょう.
(ただし,イルミネーションの様に光に色が付いていると厳しいですが)


3.色の他にパターンを組み合わせる.

 2で判定に幅を持たせると,マレット以外の部分も検出してしまう場合があります.
これを防ぐために,パターンを組み合わせます.

a.2色パターン
 マレットを2色で半分半分に塗ります.(出来ればH色相環で遠い色同士)
今までの判定を2回,2色で行い,ある程度の大きさを持ちつつ近い位置で
検出された組合せをマレットとします.

b.図形パターン
 丸などの図形をマレットに書いておきます.今まで通り1色で位置を決めた後,
その場所に図形があるか判定します.


4.追跡情報を活用する.

 初期位置を決めておき,座標を次のフレームまで保持しておきます.
次のフレームでは,前のフレームでの位置に近い位置しか検出処理しない事により,
位置精度を高めます.


(左端(もしくは右端)からマレットが動かないなら,単純に左端の縦1ラインを
上から下に走査して,何であれHSV値がある程度変化したら,そこがマレットの位置,
としてもこのアプリなら成立しそうな気はします)

以上,参考になりましたら幸いです.
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/05 13:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!