0

我在这里需要一点帮助。我有一个使用 SimpleOpenNi 库进行处理的 kinect,例如,我只希望 kinect 在 2 秒内仅发送 2 个骨架的位置。如果位置与之前发送的相同,则不执行该操作,这可能吗?谢谢你

4

1 回答 1

0

是的,您必须在“发送”和另一个之间设置延迟。

在您正在读取值的线程中:

while(..) {
  Thread.sleep(2000); /* delay 2000ms => 2s */
  /* read value */
  /* if not the first iteration, save value in temp array */
  /* else check for each bone:  oldPos - epsilon < newPos < oldPos + epsilon */
}

要检查以前的位置是否相同,您必须将骨架位置保存在临时变量中并检查新值是否相同,可能是某个特定的邻域。

不幸的是,没有其他解决方案,因为在配置文件中您只能设置两种 FPS(这里有一个讨论):

  • 对于彩色图像
    FPS = 15 @ 1280x1024
    FPS = 30 @ 640x480

  • 对于深度 FPS = 30 @ 640x480

在配置文件的标记MapOutputMode中:

<OpenNI>
  <Licenses>
    <License vendor="PrimeSense" key="0KOIk2JeIBYClPWVnMoRKn5cdY4="/>
  </Licenses>
  <Log writeToConsole="false" writeToFile="false">
    <LogLevel value="3"/>
    <Masks>
      <Mask name="ALL" on="true"/>
    </Masks>
    <Dumps></Dumps>
  </Log>
  <ProductionNodes>
    <Node type="Depth" name="Depth1">
      <Configuration>
        <MapOutputMode xRes="640" yRes="480" FPS="30" />
        <Mirror on="false"/>
      </Configuration>
    </Node>
    <Node type="User"/>
    <Node type="Gesture"/>
    <Node type="Hands"/>
  </ProductionNodes>
</OpenNI>
于 2013-12-04T16:10:43.060 回答