如何从SkeletalViewer中的两个kinect摄像头获取骨骼关节数据到文本文件? (C ++)

时间:2015-02-04 17:59:39

标签: c++-cli kinect kinect-sdk

我目前正在开发一个项目,使用多个kinect摄像头来获取SkeletalViewer中骨架数据的x,y,z坐标。我有一个想法是使用不同kinect摄像头的 KinectID 索引来将骨架关节数据集提取到 2个不同的文本文件中。但我不确定我做得对。请帮助看一下下面的修改,或者我将非常感谢您就解决这个问题的其他方法提出的所有建议。

在SkeletalViewer.h中,我修改如下:

public:
FILE* mp3DFile0;
FILE* mp3DFile1;

char mText[1024];

INuiSensor *  m_pNuiSensor;
BSTR          m_instanceId;
array         SensorIndex;

在NuiImpl.cpp中,我修改如下:

1)定义数组

ref class MyClass {
public:
    int m_i;
};

array<MyClass^>^ arrSensor() {
    int i;
    array< MyClass^ >^ local = gcnew array< MyClass^ >(2);

    for (i = 0; i < 2; i++) {
        local[i] = gcnew MyClass;
        local[i]->m_i = i;
    }
    return local;
}

2)创建数组以存储传感器索引以便稍后进行循环

HRESULT CSkeletalViewerApp::Nui_Init( )
{
    HRESULT  hr;
    bool     result;

    //create an array to store two file pointers
    FILE* mp3DFile[] = { mp3DFile0, mp3DFile1 };

    fopen_s(mp3DFile0, "D:/Kinect/KinectCam0.txt", "w+");
    fopen_s(mp3DFile1, "D:/Kinect/KinectCam1.txt", "w+");
    .
    .
    if ( !m_pNuiSensor )
    {
        hr = NuiCreateSensorByIndex(0, &m_pNuiSensor);
        //I am not sure about how to utilize this index in this case
    .
    .
    }

    if (NuiGetSensorCount(&m_pNuiSensor) > 1)
    {
        array< MyClass^ >^ SensorIndex;
        SensorIndex = arrSensor();
    }
}

3)使用for循环使用索引

将数据存储到不同的文本文件
void CSkeletalViewerApp::Nui_DrawSkeleton( const NUI_SKELETON_DATA & skel, int windowWidth, int windowHeight )
{   
    int i;
    int h;

    for (h = 0; h < 2; h++)
    {   
        //when index point to the current kinect
        if (SensorIndex[h] == &m_pNuiSensor)
        {
            for (i = 0; i < NUI_SKELETON_POSITION_COUNT; i++)
            {
                m_Points[i] = SkeletonToScreen(skel.SkeletonPositions[i], windowWidth, windowHeight);

                memset(mText, 0, 1024);

                sprintf(mText, "(%0.3f,%0.3f,%0.3f)", skel.SkeletonPositions[i].x, skel.SkeletonPositions[i].y, skel.SkeletonPositions[i].z);

                if (mp3DFile[h]) {
                    fputs((const char*)mText, mp3DFile[h]);
                }
            }

            if (mp3DFile[h]) {
                fputs("\n", mp3DFile[h]);
            }
        }
    }
    .
    .
}

我是这个Kinect编程的新手。非常感谢您的帮助! :)

0 个答案:

没有答案