OpenNIでは人物の領域をマスク画像として取得することができます。
そこで、OpenCVのMatを用いてマスク画像から人物のRGB画像、深度画像を取得してみます。
あと、ついでに背景も抽出してます。
まず、 「SamplesConfig.xml」を編集します。
「<Node type="User" name="User1"/>」を追加しましょう。
例
これでユーザ検出が可能となりました。
てことでサンプルどん
人物のRGBデータと深度データをマスクを用いて抽出しています。
マスク画像の取得は
・userGenerator
・sceneMD
この2つを用いて取得します。
取得したマスク画像を格納するOpenCVのMatクラスはMat mask(480,640,CV_16UC1);です。
では、OpenNIからマスク画像の取得方法です。
これでsceneMDにマスク画像が格納されました。
次にsceneMDからmaskにデータを格納します。
sceneMD.Data()でマスクの配列が取得できるので、その値をそのままmaskにコピーしています。
もし、Matを使わずに取得したい場合は
これでpLabelにアクセスすることで可能です。
1ピクセルだけでいいなら
でいいのかな。
次にマスクから人物領域を取得する方法
まず最初に前回抽出した人物画像を初期化します。
次にマスクデータをコピー
そしてつぎ、コピーしたマスクデータのままではcopyToがうまくできないので変換します
そしてRGB画像と深度画像からそれぞれ人物領域のみを抽出し、コピーします。
で、あとはRGB画像から人物画像を引くと、背景のみ取得できます。
この方法ならピクセル一つ一つにアクセスしていないので高速に人物領域の画像を取得することができます。
0 件のコメント:
コメントを投稿