开始使用 openNi 的问题

Problems to start using openNi

本文关键字:问题 openNi 开始      更新时间:2023-10-16

我刚刚安装了openNi库,让我的kinect在我的电脑上工作。我的问题是我只是一个 c++ 的 nov 编程。

我从此页面复制了手部跟踪的代码:

http://openni.org/Documentation/ProgrammerGuide.html

并将其粘贴到我的 VisualStudio11 测试版项目中。

它一直说我变量 xn 没有定义......但我不知道XN是什么。

如果你能告诉我如何在代码中定义 de 变量 xn,或者我必须做什么才能使代码工作。

实现:这是代码,在我上面提到的页面中

#define GESTURE_TO_USE "Click"
xn::GestureGenerator g_GestureGenerator;
xn::HandsGenerator g_HandsGenerator;
void XN_CALLBACK_TYPE 
Gesture_Recognized(xn::GestureGenerator& generator,
                   const XnChar* strGesture,
                   const XnPoint3D* pIDPosition,
                   const XnPoint3D* pEndPosition, void* pCookie)
{
    printf("Gesture recognized: %sn", strGesture);
    g_GestureGenerator.RemoveGesture(strGesture);
    g_HandsGenerator.StartTracking(*pEndPosition);
}
void XN_CALLBACK_TYPE
Gesture_Process(xn::GestureGenerator& generator,
                const XnChar* strGesture,
                const XnPoint3D* pPosition,
                XnFloat fProgress,
                void* pCookie)
{}
void XN_CALLBACK_TYPE
Hand_Create(xn::HandsGenerator& generator,
            XnUserID nId, const XnPoint3D* pPosition,
            XnFloat fTime, void* pCookie)
{
  printf("New Hand: %d @ (%f,%f,%f)n", nId,
         pPosition->X, pPosition->Y, pPosition->Z);
}
void XN_CALLBACK_TYPE
Hand_Update(xn::HandsGenerator& generator,
            XnUserID nId, const XnPoint3D* pPosition,
            XnFloat fTime, void* pCookie)
{
}
void XN_CALLBACK_TYPE
Hand_Destroy(xn::HandsGenerator& generator,
             XnUserID nId, XnFloat fTime,
             void* pCookie)
{
  printf("Lost Hand: %dn", nId);
  g_GestureGenerator.AddGesture(GESTURE_TO_USE, NULL);
}
void main()
{
  XnStatus nRetVal = XN_STATUS_OK;
  Context context;
  nRetVal = context.Init();
  // TODO: check error code
  // Create the gesture and hands generators
  nRetVal = g_GestureGenerator.Create(context);
  nRetVal = g_HandsGenerator.Create(context);
  // TODO: check error code
  // Register to callbacks
  XnCallbackHandle h1, h2;
  g_GestureGenerator.RegisterGestureCallbacks(Gesture_Recognized,
                                              Gesture_Process,
                                              NULL, h1);
  g_HandsGenerator.RegisterHandCallbacks(Hand_Create, Hand_Update,
                                         Hand_Destroy, NULL, h2);
  // Start generating
  nRetVal = context.StartGeneratingAll();
  // TODO: check error code
  nRetVal = g_GestureGenerator.AddGesture(GESTURE_TO_USE);
  while (TRUE)
  {
    // Update to next frame
    nRetVal = context.WaitAndUpdateAll();
    // TODO: check error code
  }
  // Clean up
  context.Shutdown();
}

xn是一个命名空间。

看起来您需要至少包含一个头文件。

尝试将以下内容添加到文件顶部:

#include <XnCppWrapper.h>

可能还有其他未定义的xn::类。 如果是这样,请使用文档来标识类,并检查需要#include哪个头文件。

我看到您没有包含任何头文件,因此要解决此问题,您只需要包含以下两个头文件,其中还将包含所有必需的头文件。

#include <XnOpenNI.h>
#include <XnVNite.h>

单独使用这些标头并不能解决问题,因为您需要 xn:: 命名空间。

可以通过

在每个声明之前使用 xn:: 标记来解决此问题

解决此问题的最简单方法是在代码中标头声明之后包含以下行。

using namespace xn;