【发布时间】:2013-11-01 06:37:59
【问题描述】:
我能够使用 SimpleOpenNI 成功记录和回放深度和 rgb 记录(.oni 文件)。我还希望能够从记录的文件中跟踪用户,换句话说,能够轻松地从深度图像中提取人物的剪影。在连接到传感器运行时,使用 SimpleOpenNI 很容易做到这一点,方法是在 setup() 方法中调用 enableUser(),然后在绘图调用期间获取 userMap() 或 userImage()。这样做的动机是能够轻松地将一个人的剪影从背景中分离出来。我使用的是 SimpleOpenNI 1.96 版。
这是我在记录数据时使用的代码:
SimpleOpenNI context;
public void setup()
{
context = new SimpleOpenNI(this);
// recording
context.enableDepth();
context.enableRGB();
context.enableUser();
context.enableRecorder(recordPath);
// select the recording channels
context.addNodeToRecording(SimpleOpenNI.NODE_DEPTH,true);
context.addNodeToRecording(SimpleOpenNI.NODE_IMAGE,true);
context.addNodeToRecording(SimpleOpenNI.NODE_USER, true);
context.addNodeToRecording(SimpleOpenNI.NODE_PLAYER, true);
context.addNodeToRecording(SimpleOpenNI.NODE_SCENE, true);
context.addNodeToRecording(SimpleOpenNI.NODE_IR, true);
}
这是我用来重放数据的代码:
SimpleOpenNI context;
String recordPath = "/path/to/test.oni";
public void setup()
{
context = new SimpleOpenNI(this,recordPath);
context.enableDepth();
context.enableRGB();
context.enableUser();
}
...
当我尝试重放数据时,方法调用context.enableUser(); 导致错误Couldn't getXN_STREAM_PROPERTY_ZERO_PLANE_DISTANCE Invalid memory access of location 0x4c rip=0x10e2c38e2。但是,我知道为了获取有关正在跟踪哪些用户的信息,我需要致电context.enableUser()。删除此行会消除错误,但不允许我访问有关正在跟踪哪些用户的信息。
有人知道是否可以从预先录制的.oni 文件中跟踪用户吗?
【问题讨论】:
-
更新:我还没有弄清楚如何使用预先记录的数据启用用户跟踪,但是作为一种解决方法,我使用了硬阈值,这对于预先记录的数据非常有效。跨度>
-
您能否更详细地描述您的解决方法?你如何使用“硬门槛”?谢谢,
-
@MaximeTournier,我只是假设所有大于某个最小值且小于某个最大值的深度像素都是用户的一部分,而其他一切都不是用户的一部分。这种方法只适用于预先录制的数据,不适用于实时数据。
-
好的,我明白了,非常感谢。
标签: java kinect processing openni