我是一名学生,目前正在使用多个kinect相机进行项目。我必须通过从每个kinect摄像机获取骨骼关节数据来开始我的项目,然后使用SkeletalViewer将它们分别存储到两个文本文件中。

我对SkeletalViewer.h进行了一些修改,如下所示:

public:
FILE* filePointer;
char mText[1024];


并在NuiImpl.cpp中作如下进一步修改:

HRESULT CSkeletalViewerApp::Nui_Init() {

    fopen_s(filePointer, "C:/User/Users/Documents/Shasa/Kinect3D.txt", "w+");
    filePointer = NULL;
     .
     .
     .
}

void CSkeletalViewerApp::Nui_DrawSkeleton( const NUI_SKELETON_DATA & skel, int windowWidth, int windowHeight )
{
    int i;

    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 (filePointer) {
            fputs((const char*)mText, filePointer);
        }
    }

    if (filePointer) {
        fputs("\n", filePointer);
    }
     .
     .
     .
}


结果是创建了文本文件,但内容为空白。我在线阅读了一些解决方案,但是使用NUI_SKELETON_DATA * pSkel作为参数的Nui_DrawSkeleton函数的先前版本,但是使用NUI_SKELETON_DATA和skel的新版本有所不同。使用skel.SkeletonPositions [i] .x,skel.SkeletonPositions [i] .y,skel.SkeletonPositions [i] .z是否正确?

我是否可以寻求任何人的帮助,以帮助我查看导致我的错误的原因以及如何对其进行修改?谢谢!

最佳答案

skel.SkeletonPositions[i].x是正确的。使用& skel代替* pskel只会将pskel->XXX更改为skel.XXX

问题将在这里:

fopen_s(filePointer, "C:/User/Users/Documents/Shasa/Kinect3D.txt", "w+");
filePointer = NULL;


应该是:

fopen_s(&filePointer, "C:/User/Users/Documents/Shasa/Kinect3D.txt", "w+");

关于c++ - 如何从最新的SkeletalViewer获取骨骼关节的(x,y,z)坐标? (C++),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28325927/

10-11 16:23