使用 kinect 单击鼠标获得深度
本文关键字:深度 鼠标 kinect 单击 使用 | 更新日期: 2023-09-27 18:33:08
我正在用 Kinect 开始一个项目。
我想做的第一件事是让用户单击一个对象,程序返回该对象与 kinect 的距离。
我的代码:
private void colorImg_MouseDown(object sender, MouseButtonEventArgs e)
{
double distance;
System.Windows.Point position = Mouse.GetPosition(colorImg);
distance = position.X + (position.Y * 640);
int af = (int)distance;
int depth = depthPixels[af].Depth;
System.Windows.Forms.MessageBox.Show("" + depth);
}
但这总是返回0
,问题是deptPixels
的深度属性从一开始就总是0
的。我用断点检查了这一行,对于每个像素,深度都是0
.但是为什么?
this.depthPixels = new DepthImagePixel[this.sensor.DepthStream.FramePixelDataLength];
欢迎任何帮助!
我认为
原因可能是您的DepthImagePixel[]
没有被填充。
您显示的代码行
this.depthPixels = new DepthImagePixel[this.sensor.DepthStream.FramePixelDataLength];
初始化数组但不向其添加任何数据,因此我希望其中的所有值均为零。
初始化类时,应添加一个更新此内容的事件:
this.sensor.DepthFrameReady += this.SensorDepthFrameReady;
并将其添加到类中:
private void SensorDepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
{
using (DepthImageFrame depthFrame = e.OpenDepthImageFrame())
{
if (depthFrame != null)
{
depthFrame.CopyDepthImagePixelDataTo(this.depthPixels);
}
else
{
// depthFrame is null because the request did not arrive in time
}
}
}
这是从 MSDN - 在 C# 中获取和显示深度数据中逐字解除的(大致)解除的。