我目前正在尝试使用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 ++,所以它可能是一个非常简单的错误。
非常感谢!
答案 0 :(得分:1)
您忘了将kinect sdk库添加到链接器。由于MSDN声明here,您需要链接到KinectBackgroundRemoval180_32.lib
或KinectBackgroundRemoval180_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。
可能不是问题,但它是我所看到的,并且会解释为什么编辑器没有给出任何错误,但它在运行时会发生。