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