Lia*_*roy 5 c# wpf point-clouds kinect
我正在使用SDK创建一个程序,当检测到用户时,该程序会为它们绘制一个框架供他们遵循.我最近看到一个游戏在我的Xbox,Nike + Kinect上做广告,并看到它如何显示该角色的副本,如:
http://www.swaggerseek.com/wp-content/uploads/2012/06/fcb69__xboxkinect1.jpg
要么
http://www.swaggerseek.com/wp-content/uploads/2012/06/fcb69__xboxkinect.jpg
我是否可以创建仅检测到的人(不是任何背景)的点云表示?提前致谢!
编辑
使用这个网站,我可以创建点云,但仍然无法在人体周围进行裁剪.
你可以对点进行非常简单的三角测量.查看本教程:
http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series1/Terrain_basics.php
检查结果:

看起来它们看起来并不是一个完整的点云,而是一个蓝色阴影强度图.这可以通过Kinect for Windows sdk的深度图像来完成.你要找的是球员指数.这是深度图像的每个像素中提供的位.为了获得播放器索引位,您还必须在初始化代码中启用骨架流.
所以我就是这样做的.我修改的Kinect的Windows SDK的一个快速入门发现这里加载它并进行以下修改:
//Change image type to BGRA32
image1.Source =
BitmapSource.Create(depthFrame.Width, depthFrame.Height,
96, 96, PixelFormats.Bgra32, null, pixels, stride);
//hardcoded locations to Blue, Green, Red, Alpha (BGRA) index positions
const int BlueIndex = 0;
const int GreenIndex = 1;
const int RedIndex = 2;
const int AlphaIndex = 3;
//get player and depth at pixel
int player = rawDepthData[depthIndex] & DepthImageFrame.PlayerIndexBitmask;
int depth = rawDepthData[depthIndex] >> DepthImageFrame.PlayerIndexBitmaskWidth;
//check each pixel for player, if player is blue intensity.
if (player > 0)
{
pixels[colorIndex + BlueIndex] = 255;
pixels[colorIndex + GreenIndex] = intensity;
pixels[colorIndex + RedIndex] = intensity;
pixels[colorIndex + AlphaIndex] = 100;
}
else
{
//if not player make black and transparent
pixels[colorIndex + BlueIndex] = 000;
pixels[colorIndex + GreenIndex] = 000;
pixels[colorIndex + RedIndex] = 000;
pixels[colorIndex + AlphaIndex] = 0;
}
Run Code Online (Sandbox Code Playgroud)
我喜欢用这个例子测试颜色,因为它仍然为你提供右侧的深度查看器.我在下面附上了这个效果的图像:

左边的图像是具有略微颜色的像素级强度数据的强度图.
希望能帮助大卫贝茨
| 归档时间: |
|
| 查看次数: |
6572 次 |
| 最近记录: |