アル中プログラマの備忘録

酔いどれまさになう

新しく分割しました

スポンサーサイト

このエントリーをはてなブックマークに追加
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

[C#]OpenCV触ってみた

このエントリーをはてなブックマークに追加
OpenCVを触ってみた。
と言っても、今回はC#用のラッパーのOpenCVSharpを使わせてもらった。
まだ、やってみたいことの途中だけど、飽きる前に書いてみる。

[準備]
・Visual Studio 2010 Express(C#)
・OpenCVをダウンロードしてPathを設定
・OpenCVSharpをダウンロード
・OpenCVSharpのDLLたちを参照設定に入れればOK
※OpenCVSharpとOpenCVのバージョンが違うと動かない

[ステップ1]
PCにカメラがついてるのでその映像を取り込んでみよう。
ちょっと端折るけど↓な感じで簡単だった。
//カメラ取得
CvCapture m_capture = Cv.CreateCameraCapture(0);
if (m_capture == null)
    throw new ApplicationException("カメラ取得できず");

//キャプチャ
IplImage frame = Cv.QueryFrame(m_capture);

//表示
Cv.ShowImage("カメラ画像", frame);

最終的にはOpenCVが動くわけで、OpenCVSharpにはIDisposableなクラスがいっぱい。
usingとかをきちんと使わないとすぐメモリーリークして死ぬ。
(最初、あっという間に使用メモリが1GB超えた・・・)

実際に作っているのでは動かしたいので、
タイマーでキャプチャと表示部分を繰り返し呼ぶようにしている。

[ステップ2]
「手」を抜き出してみよう。
あっちこっちのサイトやOpenCVSharpのサンプルコードを元に触ってみた。
流れは次の通り。(各処理はそれ用のメソッドがあって詳しく知らなくても全部やってくれるみたい)

1.RGBの画像をHSVに変換する
2.HSVを各チャンネルに分割する
3.H(色相)とV(彩度)の範囲を絞ってヒストグラムを求める
 (これで欲しい色の部分がわかる)
4.分けたのをまとめる
 (バックプロジェクションの計算と説明されてたけど、
 要は各チャンネルで絞り込んだ部分にすべて当てはまる部分だけ見えるようになるようだ)
5一番広いところを取り出す
6.補正してやる

これをやってやると↓みたいになる。
手検出

調べてると一般的に肌色に対応する彩度は0°~30°ぐらいらしいけど、
彩度の画像を見てわかるように、体温高いせいか手のひらの色が違うので、ここは値を変えた。
ここまでやっても70行ぐらいなので、だいぶ楽させてもらってる気がする。

でも、上のキャプチャはうまく取れたときのやつなので、
動かしているとなかなか綺麗な手のひらにならないこともわかった。
照明の色とかも多少影響するみたい。
要工夫ですな。

[ステップ3]
指先の状態を取得しよう。
これは今後の課題。


以上。
スポンサーサイト
続きを読む
  1. 2012/08/27(月) 08:52:17|
  2. C#
  3. | トラックバック:0
  4. | コメント:0

おすすめ

プロフィール

アル中プログラマ

Author:アル中プログラマ
ハイボ○ル?
いいえ
ジンジャーエールです。

検索

Translate

カテゴリ

未分類 (24)
セミナー・勉強会 (29)
読書 (11)
プログラム (6)
環境構築 (13)
C++ (0)
Java (7)
C# (1)
Tips (1)
食べ物 (12)
TED (3)
マイホーム (0)
プロマネ (1)

RSSリンクの表示

おすすめ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。