ウォールタッチパネルを5千円ぐらいで作りたい-その2(OpenCV実装)

目的

前回は,Webカメラから完璧な角度が得られることを前提としていましたが,今回は,その角度を得るためにどうするかを考えてみたいと思います.(構想は前回(その1)参照)

処理内容

Webカメラにフィルムのネガを張り付けると,可視光を遮断し赤外線を通すフィルタになります.それを踏まえて,赤外線LEDバーを撮影すると以下のようになることが予想できます.

この時,その白いライン(赤外線LEDバー)を一部遮蔽すると,ラインが途切れて以下のようになると考えられます.

あとは,この途切れた位置をもとに角度を計算すればいいということになります.

備考:上の2枚の画像は可視光を二値化したものなので,実際にどうなるかわかりません.(昨年度の経験から何とかなるはず)

処理手順

  1. Webカメラから画像を取得
  2. グレースケール化
  3. 二値化
  4. 輪郭検出(5.の事前準備)
  5. 白線を1次近似
  6. 1次近似したラインが範囲内(Y_LIMIT < y < 画像高さ-Y_LIMIT)か計算(7.の事前準備)
  7. 1次近似したライン上の画素値をサンプリング
  8. ラインが途切れた(黒い)部分を検出
  9. カメラの画角とラインが途切れた部分の比から角度を計算

コード(C++)

一部余分なものがありますが,大体こんな感じです.(カメラ1台バージョン)

ちょくちょくエラーが出るのでどこかおかしいのだと思います...

実行結果

下の画像はこのカメラの公称画角である60度を信じて,左端(x=0)を0度,右端(x=320)を60度にして単純な比で角度を求めた結果です.今回は,45度となっています.ちゃんと計算したわけではありませんが,画像の真ん中に途切れた部分があれば30度であり,右端で60度なのでだいたいあっていると思います.

今回は,うまくいくように組んだのでいいのですが,実際に使い物になるか怪しいところです.次回は,カメラを2台に増やして実際に座標計算をしてみたいと思います.

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です