如何从Kinect SDK C#数据中获取播放器深度
本文关键字:获取 播放器 深度 数据 Kinect SDK | 更新日期: 2023-09-27 18:28:02
做一个团队项目,试图在玩家(特别是玩家)接近/远离时发生一些事情,所以我们编写了这个函数。(我们不允许使用骨架功能)
private void FindDepth(DepthImageFrame depthFrame)
{
short[] rawDepthData = new short[depthFrame.PixelDataLength];
depthFrame.CopyPixelDataTo(rawDepthData);
Byte[] pixels = new byte[depthFrame.Height * depthFrame.Width * 4];
for (int depthIndex = 0; depthIndex < rawDepthData.Length; depthIndex++)
{
int player = rawDepthData[depthIndex] & DepthImageFrame.PlayerIndexBitmask;
int depth = rawDepthData[depthIndex] >> DepthImageFrame.PlayerIndexBitmaskWidth;
if (player > 0)
{
playerDepth = rawDepthData[depthIndex];
}
}
}
为什么这不能通过抓取一个像素来正确抓取玩家的深度?
深度像素表示为16位。较低的3位提供播放器索引,其余13位提供深度,例如{深度位}{播放器索引位}
{010010111001 0}{010}
因此,为了找到玩家索引,我们通过DepthImageFrame.PlayerIndexBitmask进行AND,如下方所示
(0100 1011 1001 0010)与(0000 0000 0111)=0000 0000 0010=2,即第二玩家
为了找到距离,我们右移3位,返回13位,如下所示0000 1001 0111 0010=2418,即2418 mm
重要的是要记住,只有当骨架跟踪处于启用状态。如果骨架跟踪处于禁用状态,则每个深度中的玩家编号值设置为0。