画像処理の基本として背景除去に手を出してみる。
まだ初歩なので実運用には程遠いものだと思う。
1、フレーム差分を求める
フレーム差分を求める。
これは動きのあった箇所が抽出されることになる。
ただ、カメラではどうしても手ぶれがあるので、実行してみると輪郭抽出みたいになってしまった。
ちなみに、Core.absdiffメソッドの第一、第二引数はグレースケールじゃないといけない。
カラー画像で抽出したいならば、この関数の実行結果をマスクとしてフルカラー画像を処理するとかしないといけない。
//( onCameraFrameに以下のコードを記述する ) // 1フレーム前の画像との差分をとる mGray = inputFrame.gray(); Core.absdiff(mPreFrame, mGray, mIntermediateMat); // 1フレーム前の情報として保持する mPreFrame = inputFrame.gray().clone(); // 差分画像を表示する return mIntermediateMat;
Javaでのメモリの扱いになれていないのでclone();していいものやらどうやら。
手元の実験環境だとまだ処理落ちはしてないし。OK。
まずは初歩ということで。