アットウィキロゴ

VP10.1.22


ePiano

ePianoが閉鎖かも?
トップページしか開かないなあ。
とりあえず、ePianoと連動は後にして、音を出すだけにしとこうか。


memo

緑の線を用意するのが面倒なので、背景画像との差分をとる方法をとりあえずやってみることにする。


①グレースケール化したあと差分をとる
②差分をとったあとグレースケール化
どっちがいいか検討。
当然、差分をとる時間はグレースケールにした後のほうがフルカラーより速い。
よって速度では①>②。
精度はどうだろう。いくつか例を試してみる。
画像1(255,0,0) 画像2(0,0,0)
①グレースケール化 画像1(76) 画像2(0) → 差分(76)
②差分(255,0,0) → グレースケール化(76)

画像1(255,0,0) 画像2(255,255,255)
①グレースケール化 画像1(76) 画像2(255) → 差分(179)
②差分(0,255,255) → グレースケール化(179)

画像1(255,0,0) 画像2(100,100,100)
①グレースケール化 画像1(76) 画像2(100) → 差分(24)
②差分(155,100,100) → グレースケール化(223)

画像1(255,0,0) 画像2(0,255,0)
①グレースケール化 画像1(76) 画像2(149) → 差分(73)
②差分(255,255,0) → グレースケール化(225)
やらなくても分かってたけど、やっぱり①<②だな。
グレースケール化すると、赤とグレーの違いがほとんどでてない。
場合によっては全然違う色なのに差分0になることもありえそう。
ということで、速度とか度外視で②の順で。


プログラムの流れ
  • cvgetcaputreで背景画像取得
  • ループ
    • cvgetcaptureで現在の画像取得
    • cvcopyで背景画像と現在画像の差分を作成
    • cvconvertでグレースケール化
    • cvthresholdで一定以上変化したところを抜き出す
    • cvgetimgでHSPのバッファに転送
    • 鍵盤の位置付近の変化を見て、押したかどうか判断
    • 押したら音出し、離したら音消し
    • 鍵盤画像合成、バッファからスクリーンにコピー
    • wait
  • ループ


進行状況

画像の取得~押したかどうかの判断をとりあえず作成。
↑の黒いところが背景との差分が大きいところ。手が黒いわけではない。
赤いところが押したところ。真ん中の水平線上の黒の数を数えた。
本当は上下数ドット分も数えたい。

画像が小さいので、思ったより遠くから映さなくてはいけない。
狭い机だと使えないなあ。





  • てす -- nagyo (2011-01-22 17:20:03)
名前:
コメント:
最終更新:2011年02月03日 18:05