Created
March 12, 2015 04:16
-
-
Save taylor224/1a534cb9287a4205c91f to your computer and use it in GitHub Desktop.
Get Depth(Z position) of specified coordinate with Kinect v2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public partial class MainWindow : Window | |
{ | |
private KinectSensor kinectSensor = null; | |
private CoordinateMapper coordinateMapper = null; | |
private MultiSourceFrameReader multiFrameSourceReader = null; | |
public MainWindow() | |
{ | |
InitializeComponent(); | |
// one sensor is currently supported | |
this.kinectSensor = KinectSensor.GetDefault(); | |
// get the coordinate mapper | |
this.coordinateMapper = this.kinectSensor.CoordinateMapper; | |
// get the depth (display) extents | |
FrameDescription colorFrameDescription = this.kinectSensor.ColorFrameSource.CreateFrameDescription(ColorImageFormat.Bgra); | |
FrameDescription frameDescription = this.kinectSensor.DepthFrameSource.FrameDescription; | |
// open multiframereader for depth, color, and bodyindex frames | |
this.multiFrameSourceReader = this.kinectSensor.OpenMultiSourceFrameReader(FrameSourceTypes.Depth | FrameSourceTypes.Color | FrameSourceTypes.Body); | |
this.multiFrameSourceReader.MultiSourceFrameArrived += this.Reader_MultiSourceFrameArrived; | |
} | |
private void Reader_MultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e) | |
{ | |
MultiSourceFrame multiSourceFrame = e.FrameReference.AcquireFrame(); | |
if (multiSourceFrame != null) | |
{ | |
using (DepthFrame depthFrame = multiSourceFrame.DepthFrameReference.AcquireFrame()) | |
{ | |
if (depthFrame != null) | |
{ | |
// Specified X, Y coordinate | |
// In 1920 x 1080 color frame | |
double x = 1000; | |
double y = 900; | |
FrameDescription depthFrameDescription = depthFrame.FrameDescription; | |
depthWidth = depthFrameDescription.Width; | |
depthHeight = depthFrameDescription.Height; | |
depthframeData = new ushort[depthWidth * depthHeight]; | |
depthFrame.CopyFrameDataToArray(depthframeData); | |
CameraSpacePoint[] csp = new CameraSpacePoint[1920 * 1080]; | |
this.coordinateMapper.MapColorFrameToCameraSpace(depthframeData, csp); | |
// Depth(Z Position) of specified coordinate | |
float DepthPosition = csp[(1920 * Convert.ToInt16(y)) + Convert.ToInt16(x)].Z; | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Get Depth of specified coordinate with Kinect V2
Use this when you want to get depth(Z coordinate) of specified X,Y coordinate.
It will return float Z coordinate.
Z value means meter distance from Kienct sensor.
1 meter = 1.0 / 2.5 meter = 2.5
If Z value is zero, It means Kinect sensor could not get distance of that coordinate.
Max X coordinate is 1920 and Max Y coordinate is 1080.
X,Y coordinate is referenced by ColorFrame(1920x1080) not DepthFrame(512x424).
This source is part of WPF program. Modify it to fit your program.
MapColorFrameToCameraSpace() function can make your program update slowly. Please notice about this.
You need Kinect for Windows V2 sensor, Kinect SDK 2.0 and Visual Studio 2013 to use this.