0

我正在尝试设置一个简单的程序来使用 OpenKinect 连接 Kinect 并以某种方式测试与我的笔记本电脑的通信。我可以很好地运行演示,但我想通过代码对其进行测试,以确保我知道发生了什么。到目前为止,我仍然无法连接它。截至目前的代码是 -

#include "/usr/local/include/libfreenect.hpp"
#include <iostream>
using namespace std;
Freenect::FreenectDevice::FreenectDevice* device; 

int main(int argc, char** argv) {
    Freenect::Freenect k;
    device = &k.createDevice<Freenect::FreenectDevice>(0);  //line 8
    cout<<"\ndeviceCount:"<<k.deviceCount();
    return 0;
}

当我编译时,它告诉我

    In member function ‘ConcreteDevice& Freenect::Freenect::createDevice(int) [with ConcreteDevice = Freenect::FreenectDevice]’:
test_kinect.cpp:8:   instantiated from here

libfreenect.hpp:196: error: cannot allocate an object of abstract type ‘Freenect::FreenectDevice’

所以 FreenectDevice 类是抽象的......那么我应该如何创建一个设备呢?每当我想使用 OpenKinect 时,我是否应该编写自己的类来继承这个类?我对如何实际使用这个库提供的代码感到非常困惑。我一直在寻找某种基本教程,但一无所获。如果有人知道一个好的教程,那对我来说是最好的。任何帮助表示赞赏,谢谢。

4

1 回答 1

0

嗯,是的,您需要继承 FreenectDevice 并实现两个回调 (VideoCallbackDepthCallback),它们将接收 Kinect 注册的视频和深度信息。

示例的问题在于,在库的整个生命周期中都有 API 更改,因此它们可能并非都适用于当前版本。工作示例代码的最佳选择是OpenKinect Wiki的C++ 包装器部分cppview.cpp,它有两个(希望是)当前示例,并包含在 libfreenect 本身的源代码分发中。

于 2012-04-26T20:23:35.637 回答