2017-04-17
画像色取得が遅いよー(ToT)・・・とゆう話し(?)
何気に触発されて、動体検知的なことを調べてみたのだけれど・・・
・・・なんだかさっぱり分からないヽ(;´Д`)ノ
それでも、画素値差分検出ってゆうのは、なんとかワタシの知恵でもできそうだ。
http://www2.wisnet.ne.jp/~daddy/LC3/CaptureAlgorithm.html
定期的に静止画を取得して、その画像からピクセルごと色を取得して、前後の画像を比較。色が違っていたら、そのピクセルは動いたよってことだね。
出来そうだけど、画像色取得(点取得)や点描画が遅すぎて、死にたくなる予感。
以前、ノベルを作ってた時に、記事にはなってないけど、アルファ値付きのマスクでの合成が出来ないかと思って試作したんだけども、あまりの遅さに挫折したんだよね。
なにしろ640*480の画像で、20~30秒もかかるんだもん!
この問題と、セーブデータの仕様を考えるのがめんどーってゆうのが、ノベルに飽きちゃった原因ですかね;;;
(いやむしろ、完成させたところで、絵も描けなけりゃ文章も書けんだろ! って事実に気付いちゃった・・・w)
それはさておき、動体検知です。
方針としては、
1,タイマーを回して、クリップボードコピーでフレームを取得。
3,イメージからピクセルごと画像色取得して、値を配列に保持。
・・・的な?
そして、
5,感度値とゆうのを設定して、それより差が大きければ、そのピクセルを検知と認定するらしい。
動いていない背景も、ようく見たら結構ちらつきがあって、全く色が変化してないわけじゃないから、幅を持たすんだね。
6,閾値を設定して、検知となったピクセル数が閾値を超えたら、その画像は動いたよと判断する。
コレでちょこっと、監視カメラっぽい機能を搭載してみようと思う。
よくある、動くモノが映ったらシャッターを切ったり、メールで送ったり、録画を保存したりする的なコトだね。とりあえず簡単に、静止画保存を呼び出す感じで。
さらに・・・加えて、動いたところをモニターしたい(?)とゆう野望なのです。
それをリアルタイムでやろうとすると、コレがまた予想どうりなかなかキビシイ。
たぶんだけど、なでしこの点取得(画像色取得)と点描画は、WindowsAPIのGetPixelとSetPixelが元になってると思われ、コレ自体が遅いとゆう評判なので、もはやどうしようもないっぽいんですよね~(--;
何か、他に手立ては無いのかなあ・・・
とりあえず、画像色取得でやるとすると、高速化するには画像を縮小してピクセル数を減らすしかない。
3の前にイメージを縮小するとして、縮小すると精度が下がる。速度を取るか、精度を取るかの二択・・・でもないけど、妥協点を見いださなきゃならいって話になる。
#----------------------------------------------------------- 精度=20 精度=精度/100 動体検知モニターとはフォーム。 これについて 可視はオン。 スタイルは「枠固定」 オフに最大化ボタン有効変更。 タイトルは「動体検知的な?」 クライアント幅はCW幅。 クライアント高さはCW高さ。 表示用とはイメージ。 これについて 可視はオン。 親部品は動体検知モニター。 幅はCW幅。 高さはCW高さ。 位置は「0,0」 表示用を黒色で画面クリア。 2回 比較用[回数-1]をイメージとして作成。 比較用[回数-1]→可視はオフ。 比較用[回数-1]→位置は「0,0」 比較用[回数-1]→幅はCW幅。 比較用[回数-1]→高さはCW高さ。 Tとはタイマー。 その値はフレームレート。 その時満ちた時は~ C=C+1。D=0。 CWハンドルをクリップボードコピー。 比較用[C%2]→画像は「クリップボード」。 比較用[C%2]を画像グレイスケール。 比較用[C%2]をCW幅*精度,CW高さ*精度へ画像高速リサイズ。 yで0からCW高さ*精度-1まで繰り返す。 xで0からCW幅*精度-1まで繰り返す。 比較用[C%2]のx,yから画像色取得。 P¥(C%2),D=それ/$10000を切り下げ。 D=D+1。 表示用の画像は「クリップボード」。 #-----------------------------------------------------------
精度は、何パーセントまで画像を縮小するかの値となってます。
うーん、画像色取得を終えて、単にクリップボードの画像を表に転送しているだけなんだけどね~。
ストレス無く動くと言ったらせいぜい20%・・・(´д`;
リアルタイム感を出そうと思ったら、10%とか・・・Σ(゜д゜;
その上、動いたピクセルに点描画かなんかすることを考えたら・・・あああ(ToT)
いや、どっちにしても、画像色取得が最大のネックなんだから、しようがない。
しかしまー、動いたよ→静止画保存・・・くらいなら、出来そう感があるんで、とりあえずはそれかな;;;
この場合は、細かい動きは無視して、大きく動くものを侵入者(?!)としてとらえるわけだから、ちっちゃこい画像からの検出でもいけそう(たぶん)