0

OpenFrameworks を使用するのはこれが初めてです。OpenCV のオプティカル フローを OpenNI のユーザー マスクで動作させるために使用しています。だから骸骨はいらない。必要なのは、OpenNI のユーザー マスクです。

私はOpenNI バージョン 1.5.4.0NITE バージョン 1.5.2.21を使用しており、Ubuntu Trusty を使用しています。

1 つを除いて、ほとんどの部分が機能します。ユーザー マスクが表示されません。ネイティブの OpenNI のサンプルが機能します。ユーザー アウトラインが表示されます。しかし、OpenFrameworks からは、ユーザー マスクを取得できないようです。

私の OpenFrameworks コードの各ユーザーに対して、次のことができます。

// "user" is an object returned from ofxOpenNI::getTrackedUser

// This actually displays a skeleton:
user.drawSkeleton();
// These two do nothing:
user.drawMask();
user.drawPointCloud();

これは、OpenNI デバイスのデバッグ ビューにも当てはまると思います。

// openNiDevice is an instance of ofxOpenNI
openNiDevice.drawDebug();

これは、RGB カメラと深度カメラをスケルトンで表示していますが、ユーザー マスクは表示されていないと思います。ユーザー アウトラインが均一な深度読み取りと間違われる可能性があるため、完全には明確ではありませんが、そうではないと思います。デバッグ画面でもユーザーマスクはデプスカラーとは違う色になると思います。

描画時に画面にユーザー数を出力すると、ユーザーofxOpenNIが検出されていることがわかります。また、スケルトンが表示されているので、何かを見ているに違いありません。

繰り返しますが、OpenNI サンプル アプリSample-NiUserTrackerは完璧なアウトラインを提供してくれるので、OpenNI は機能しているに違いありません。

私は何を間違っていますか?

4

1 に答える 1

0

私はそれを考え出した。ユーザー マスク コードのどこかで、数値が int として保存されますが、char として読み取られます。そのため、ユーザー マスクのピクセルを新しい配列に保存しますが、4 つのエントリのうち 1 つだけを保持するだけでうまくいきました。

基本的にこれ:

const unsigned char * userPix = user.getMaskPixels().getPixels();
int dataSize = user.getMaskPixels().getWidth() * user.getMaskPixels().getHeight() * 4;
unsigned char goodGray[dataSize / 4];
for (int i = 0; i < dataSize; i += 4) {
  goodGray[i / 4] = userPix[i];
}

goodGrayofImage適切なピクセルが含まれるようになり、オブジェクトの作成に使用できるようになりました。

于 2014-12-09T03:06:03.380 に答える