我正在使用Kinect SDK,我试图以两种方式过滤深度图像数据:
其结果主要是仅显示玩家身体的某些部分,这些部分距离传感器的深度不到一定深度。
虽然下面的代码完成了我想要它做的事情,但是当我运行性能分析时它没有证明非常好,所以我正在寻找可以改进它的方法。
基本问题是数组包含307200个值(深度图像大小为640x480),我试图让这个方法每秒调用30次左右。
有没有人知道如何更有效地完成这项工作?该代码在其他部分也使用了EmguCV库,我使用cvInvokeThreshold方法进行了修改,但它并没有像这段代码一样工作......
如果您需要更多信息,请与我们联系。
非常感谢,
Dave McB
public static byte[] GetDepths(byte[] depths, DepthImagePixel[] depthPixels, int width, int height, int threshold)
{
Parallel.For(0, width, i =>
{
for (int j = 0; j < height; j++)
{
//Have to calculate the index we are working on using i and j
int rawDepthDataIndex = i * height + j;
//gets the depth and player values
short depth = depthPixels[rawDepthDataIndex].Depth;
short player = depthPixels[rawDepthDataIndex].PlayerIndex;
if (player > 0 && depth < threshold)
depths[rawDepthDataIndex] = (byte)depth;
else
depths[rawDepthDataIndex] = 0;
}
});
return depths;
}
答案 0 :(得分:0)
嗨我有深度图像和切割的问题。
我使用此代码
Using depthFrame As DepthImageFrame = e.OpenDepthImageFrame()
If depthFrame IsNot Nothing Then
' Copy the pixel data from the image to a temporary array
Me.depthPixels = Me.smoothingFilter.CreateFilteredDepthArray(Me.depthPixels, depthFrame.Width, depthFrame.Height)
depthFrame.CopyDepthImagePixelDataTo(Me.depthPixels)
depthReceived = True
End If
End Using