我试图计算用户选择的点的x,y和z坐标。 我的程序显示彩色流图像和深度流图像,用户可以选择两个兴趣点。然后我的程序应该计算两点之间的距离。因为我需要以mm为单位的坐标。所以我的计划是将框架映射到SkeletonPoint结构,这样我就可以读取由kinect传感器提供的信息。 我现在的问题是,如果我做得对,或者我在代码中遗漏了某些内容。 问题是我有时会在x和y轴上的某个点得到负坐标,所以我不确定我是否遗漏了某些东西。
SkeletonPoint[] mySkeletonArray;
private void SensorDepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
{
using (DepthImageFrame dFrame = e.OpenDepthImageFrame())
{
if (dFrame != null)
{
dFrame.CopyDepthImagePixelDataTo(myDepthArray);
mySensor.CoordinateMapper.MapDepthFrameToSkeletonFrame(DepthImageFormat.Resolution640x480Fps30, myDepthArray, mySkeletonArray);
this.myDepthBitmap.WritePixels(
new Int32Rect(0, 0, this.myDepthBitmap.PixelWidth, this.myDepthBitmap.PixelHeight),
this.colorPixels,
this.myDepthBitmap.PixelWidth * sizeof(int),
0);
}
}
}
private void Mouse_ClickTest(object sender, System.Windows.Input.MouseEventArgs e)
{
System.Windows.Point myMousePosition = e.GetPosition(DepthImage);
double xpixel = myMousePosition.X;
double ypixel = myMousePosition.Y;
int xpos = (int)xpixel;
int ypos = (int)ypixel;
int depthWidth = mySensor.DepthStream.FrameWidth;
int depthIndex = xpos + (ypos * depthWidth);
SkeletonPoint mySkeletonArray = this.mySkeletonArray[depthIndex];
float zpos = mySkeletonArray.Z;
float xp = mySkeletonArray.X;
float yp = mySkeletonArray.Y;
}