如何从最新的SkeletalViewer获取骨骼关节的(x,y,z)坐标?(C++)

How to get (x, y, z) coordinates of skeletal joints from latest SkeletalViewer? (C++)

本文关键字:C++ 坐标 最新 SkeletalViewer 获取      更新时间:2023-10-16

我是一名学生,目前正在使用多个 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_DrawSkeleton函数使用NUI_SKELETON_DATA * pSkel作为参数,但这个新版本使用NUI_SKELETON_DATA和skel是不同的。使用斯凯尔是否正确。SkeletonPosition[i].x, skel.SkeletonPosition[i].y, skel.SkeletonPosition[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+");