他の人がOpenNIレコーダーモジュールを使用して記録したデータを使用しています。残念ながら、レコーディング中に誤ってミラーリング機能をオンに設定してしまったため、1。MirrorCapを使用して深度をミラーリングし、2。AlternateViewPointCapを使用して深度をrgbに合わせるという問題がいくつかあります。次のように、深度ノードからこれらの機能にアクセスしてみました。
xn::Context ni_context;
xn::Player player;
xn::DepthGenerator g_depth;
xn::ImageGenerator g_image;
ni_context.Init();
ni_context.OpenFileRecording(oni_filename, player);
ni_context.FindExistingNode(XN_NODE_TYPE_DEPTH, g_depth);
ni_context.FindExistingNode(XN_NODE_TYPE_IMAGE, g_image);
g_depth.GetMirrorCap().SetMirror(false);
g_depth.GetAlternativeViewPointCap().SetViewPoint(g_image);
ただし、これは機能しませんでした。ミラーをfalseに設定した後でも、g_depthのIsMirrored()コマンドはtrueとして返され、alternateviewpointcapはジェネレーターから受け取る深度マップを変更しません。
また、モックノードを介してそれを実行してみました。
xn::MockDepthGenerator m_depth;
m_depth.CreateBasedOn(g_depth);
m_depth.GetMirrorCap().SetMirror(false);
m_depth.GetAlternativeViewPointCap().SetViewPoint(g_image);
xn::DepthMetaData temp;
g_depth.GetMetaData(temp);
m_depth.SetMetaData(temp);
これは、m_depthから取得した深度マップにも影響しません。色と深さの情報を揃える方法について、あらゆる提案をいただければ幸いです。このデータは記録が難しく、何らかの形で使用する必要があります。
私の現在の解決策は、SetMetaData関数で設定する前に、モック深度ノードを作成し、独自のルーチンを使用してすべてのピクセルを反転することです。次に、OpenCVを使用して、ユーザーに4ポイントをクリックさせることにより、RGB画像から深度画像への遠近法変換を作成します。次に、この変換をrgbフレームに適用して、値を揃えます。完璧ではありませんが、機能します。ただし、データを使用する必要がある可能性のある他の人のために、より適切な修正を行いたいと思います。