【发布时间】:2015-10-29 12:48:13
【问题描述】:
我有一个关于 OpenNI 的简单问题:
如果我使用基本示例来读取 Kinect(或“.oni”文件),如下所示:
// Missing init
while(true) {
// Read a new frame
rc = g_context.WaitAnyUpdateAll();
g_depth.GetMetaData(g_depthMD);
mystuff();
}
// Missing close
如果 mystuff() 操作需要 100 毫秒,是否会跳过下一帧(因为 Kinect 是 30FPS,所以每帧 33 毫秒)我会错过它们,或者是否有任何缓冲区可以将它们保存在 Kinect 或 OpenNI 中?假设我将一些 JPEG 保存到磁盘,但我没有得到所有图像(时间戳:0,33,66,133,200,...)
另一个问题:
每当我保存到“.oni”文件然后从中读取时,都会丢失帧,这是因为写入磁盘会使程序跳过帧(与上述相同的情况,但在 Record() 方法内)?当我从实时 Kinect 读取所有帧时(时间戳:0,33,66,100,133,166,200,...)
【问题讨论】:
-
我可以回答你的第二个问题。 Kinect 可能会达到 30 fps,但如果你用它做一些事情(包括保存到磁盘中),那么你会消耗时间。如果在这段时间你得到另一个帧,并且你的程序很忙,那么这个帧将被省略,你会得到下一个......所以最后你会有 20 fps。我的建议是不要使用 ONI,将信息保存为图像或 PCD 文件并以您需要的速度加载它们......另外我建议先保存在内存中,然后如果你有足够的 RAM 将其转储到硬盘中
-
谢谢,这正是我需要知道的,在其他地方还没有找到。如果您有一些更详细地讨论这个问题的来源,请随时分享。就我而言,我必须将其另存为 .oni,因为我需要将我的测量结果链接到我的结果,以便任何人都可以重做它们,而我没有时间实施自定义方法来保存信息。
-
我不会推荐 ONI。你也可以看看openni2他们有一些你可以选择你想使用的框架,虽然openni 1和2的ONI不兼容......我为我的工作创建了一个捕获工具,以不同的格式保存数据如果您愿意,可以使用github.com/cvlabbonn/tools_openni2