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

标签 c++ kinect kinect-sdk

我是一名学生,目前正在使用多个 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 不同强>.使用 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/

相关文章:

c++ - QGraphicsView fitInView 边距

C++:&(std::cout) 作为模板参数

opencv - 数数站在我们 Kinect 前面的人数

java - 使用 OpenNI 记录和读取 oni 文件时出现问题。

c# - 为 Kinects 深度场创建 3D 面部网格

c# - 使用 C# 的 Kinect v2 颜色深度映射

c# - 保存原始深度数据

c++ - LITTLE_ENDIAN 机器也将修复 BIG_ENDIAN 代码

c++ - 如何在不破坏 vtbl 的情况下执行与 memset(this, ...) 等效的操作?

c# - 当它是垂直而不是水平时,是否可以使用 kinect 跟踪 body ?