用Kinect c ++去除背景

时间:2014-04-17 11:02:00

标签: c++ sdk kinect

我目前正在尝试使用C ++来计算使用Kinect For Windows SDK来删除仅从场景中提取播放器的背景。为此,我使用了开发人员工具包中提供的示例,我目前遇到了一个问题。

在分析样本时,我发现了这行代码:NuiCreateBackgroundRemovedColorStream(_sensor,& m_pBackgroundRemovalStream);

这行代码启动后台删除,属于KinectBackgroundRemoval.h。当试图使用这行代码时,Visual Studio没有用错误强调它,但是当我按下运行时,它说我的代码有问题:

Error   25  error LNK2019: unresolved external symbol __imp__NuiCreateBackgroundRemovedColorStream@8 referenced in function "public: __thiscall Kinect::Kinect(void)" (??0Kinect@@QAE@XZ)   C:\Users\Ricardo\documents\visual studio 2013\Projects\OpenCVSample\OpenCVSample\Kinect.obj OpenCVSample

我的代码如下:

NuiCreateSensorByIndex(0, &_sensor);
    _sensor->NuiInitializationFlags();
    _sensor->NuiInitialize(NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEX | NUI_INITIALIZE_FLAG_USES_COLOR);
    _sensor->NuiImageStreamOpen(NUI_IMAGE_TYPE_DEPTH_AND_PLAYER_INDEX, DEPTH_RESOLUTION, 0, 2, _depthEvent, &_depthStreamHandle);
    _sensor->NuiImageStreamOpen(NUI_IMAGE_TYPE_COLOR, RGB_RESOLUTION, 0, 2, _rgbEvent, &_rgbStreamHandle);
    _sensor->NuiSkeletonTrackingEnable(_skeletonEvent, NUI_SKELETON_TRACKING_FLAG_ENABLE_IN_NEAR_RANGE);

    NuiCreateBackgroundRemovedColorStream(_sensor, &m_pBackgroundRemovalStream);
    m_pBackgroundRemovalStream->Enable(RGB_RESOLUTION, DEPTH_RESOLUTION, _backgroundRemoveEvent);

请注意,我已经配置了包含文件,并且没有任何错误加下划线。我不习惯C ++,所以它可能是一个非常简单的错误。

非常感谢!

2 个答案:

答案 0 :(得分:1)

您忘了将kinect sdk库添加到链接器。由于MSDN声明here,您需要链接到KinectBackgroundRemoval180_32.libKinectBackgroundRemoval180_64.lib。如果使用Visual Studio,可以将这些行添加到代码中(任何地方):

#if _WIN64
#pragma comment(lib, "KinectBackgroundRemoval180_64.lib")
#elif _WIN32
#pragma comment(lib, "KinectBackgroundRemoval180_32.lib")
#endif

答案 1 :(得分:0)

我不习惯使用c ++,但我注意到在初始化所有其他流之前初始化backgroundremoval流。您的BGRemovalStream同时使用图像,深度和图像。骨架流,在这两个流中,您需要将数据传递给BG移除流。

因此,图像/深度或骨架流可能会在创建/初始化之前尝试将数据发送到BGRemovalstream。

可能不是问题,但它是我所看到的,并且会解释为什么编辑器没有给出任何错误,但它在运行时会发生。