[二〇一七年一月三十一日]
USBカメラ3台の映像表示プログラムを、改良中−其の4
今回は、“USBカメラの切り替え/モニタ(画面)との組み合わせ変更”と“映像の加工(2値化)”を試みた。
狙っているのは、“動き”がある画面を出来るだけ(切り替えずに)長く表示し続けることが出来ないか?ということ。
現在の方式だと、“USBカメラの自動切り替え”には数秒掛かるし、自動的に2カメ、3カメを切り替えていると、どちらの画面ででも、その“動き”を取りこぼす恐れがあるから。
で、その“動き”を検出するために、“映像加工=白黒画像の2値化”をしてみた。
画像の加工に、OpenCVのライブラリを使わせて貰っているが、これは大変良く出来ていると思う。
指定通りにやると、あっという間に2値化が出来た!(図1、動画1<クリック> 笑)
ただ、残念なのは、此処から先に道が無いことだ。(“藪漕ぎ”になるのかな?苦笑)
“動き”が有れば、「スイッチ」を入れたいのだが、それを簡単に実現出来そうなライブラリが(今のOpenCV 2.3には)見付からない?!
今の場合“動く物体”の点数が一定数以上で有れば、あるいはそれらに変化が有れば、「スイッチ」を働かせて、自動的に“表示の時間”を伸ばす処理をしたいと思っている。
つまり、“画像(全体)の一意的な量/値”(例えば、白100%と黒0%の中間値)が欲しいのだが、まだ、今は試行錯誤中だ。
どうも、自分で、画像の中の「1」の数を勘定するしか手は無さそうだが、...もう少し、既成ライブラリなどを探してみて、兎に角、自作しよう!(当然)
それが出来たら、次は、“タイマ機能”を利用して、“映像のスムーズ化”が出来ないかをやってみたい。...あ、その前に、Matや配列、ポインタなどについてもう少しきちんと学んでおかねば!
−−−−−−−−−−−−−−−−−−−−−−−−−
カメラ切り替え
VBやVC/VC++を使っていると、自分好みのメニューなど、しゃかしゃかと簡単に作れるので、“Visualxx様々”なのだが、プログラムの中味そのものを下手に触ってしまうと、素人には手に負えなくなる。
自動的に作ってくれるクラスや配列(?)を、自分勝手に削ってしまったら、矢鱈“警告”や“エラー”が出て来て往生した。(苦笑)
そうした苦難(?)を乗り越えて作ってみたのが、自前の「操作メニュー」だ。(笑 図2は都合で縦長に変形してあるが)
これで、映し出すモニタとカメラの対応関係を、好きなように入れ替えることが出来るようになった。
ただ、1台のカメラ映像を、2台のモニタで取り合いをすると、プログラムが暴走するようなので、それは黙って拒否/禁止するようにしてある。
動画2(図2のメニューを<クリック>)は、時計の映像を2値化してみたもので、秒針の映像が不連続なのは、2カメと3カメの切り替えに、“スムーズさ”がないため。
その“スムーズさ”がないのは、“プログラムが拙い”からだが、それは多分、“マルチスレッド”が上手く使えていないからだろう、と思っている。(今後の検討事項!)
課題
プログラムの中味は、至ってシンプルで素人的だが、自分の能力範囲内で望むように、出来て来ている。
今はまだ、シーケンシャルに、“2カメ+1カメ+2カメ(2値化処理)”と“3カメ+1カメ+3カメ(無処理)”を繰り返すプログラムになっている。(図3、図4<クリック>)
尚、煩雑になるので、カメラ−モニタ対の表記は省略しているが、これらの入れ替えが自由になれば、表記の方法も考えないといけないかも。
でも、OpenCVで開いた「ウィンドウ枠」を相手に、自由に細工出来るほど、腕は上がっていないからなぁ。(苦笑)
いずれにしても、今は“動き”が有れば、それで「スイッチ」を起動する、それを試してみたい。
それにしても、プログラムを弄くる近頃、良く腹が減る!・・・頭を使うだけでも、体内のエネルギー消費が増えるらしいが、きっとその類なのか?(笑)