
using System
using System.Collections.Generic
using System.Linq
using System.Text
using System.Windows
using System.Windows.Controls
using System.Windows.Data
using System.Windows.Documents
using System.Windows.Input
using System.Windows.Media
using System.Windows.Media.Imaging
using System.Windows.Navigation
using System.Windows.Shapes
using Microsoft.Kinect
namespace WpfApplication2
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()//vs2010自动生成的。
{
InitializeComponent()
}
private KinectSensor _kinect//一个全局变量,自然是用来调用Kinect用的,
private void startKinect()
{
if (KinectSensor.KinectSensors.Count >0)//如果有一个Kinect是可以使用的。
{
_kinect = KinectSensor.KinectSensors[0]//打开第一个Kinect
MessageBox.Show("kinect 目前的状态为:" + _kinect.Status)//这里调用一个messagebox来显示现在的状态。
_kinect.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30)
_kinect.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30)
_kinect.SkeletonStream.Enable()//使能skeleton
_kinect.AllFramesReady +=
new EventHandler<AllFramesReadyEventArgs>(_kinect_AllFramesReady) //大概意思就是添加一个事件处理程序吧,类似于单片机中的//中断。
_kinect.Start()//设置完成之后启动Kinect
}//if
else
{
MessageBox.Show("没有任何Kinect设备")
}
}//start kinect
void _kinect_AllFramesReady(object sender, AllFramesReadyEventArgs e)//打开并显示彩色图像的具体程序。
{
using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
{
if (colorFrame == null)
{
return
}//if null
byte[] pixels = new byte[colorFrame.PixelDataLength]
colorFrame.CopyPixelDataTo(pixels)
int stride = colorFrame.Width * 4
imageCamera.Source =//这个imageCamera变量时在mainFrame中定义的一个Image控件。
BitmapSource.Create(colorFrame.Width, colorFrame.Height,
96, 96, PixelFormats.Bgr32, null, pixels, stride)
}
//throw new NotImplementedException()
}
private void Window_Loaded(object sender, RoutedEventArgs e)//当第一次窗体加载时,调用StartKinect。
{
startKinect()
}
}
}
[csharp] view plain copy
在python中numpy是很好用的数据处理包。不了解你说的数据结构但是可以尝试把数据转成numpy的md数组格式。之后可以在数组中进行检查看是不是所有的三通道都相等。如果说这样的话那么理论上三通道和三通道代表的信息都是一样的,直接在里面切片不会影响结果。SDK 安装
kinect 是输入。类似鼠标 即时动态捕捉、影像辨识、麦克风输入、语音辨识
Kinect 是一组传感器的组合,包含一个彩色摄像头,一对深度摄像头(一个用以发射红
外,一个用以接收) ,一组麦克风阵列和底座马达。
彩色摄像头想必大家都已经很熟悉了。深度摄像头是由红外线提供的,返回画面上每个
点的深度值(离 Kinect 的距离,单位是 mm,标称精度约 5mm) 。麦克风阵列其实是数个水平放置的麦克风,因为彼此间有距离,所以可以识别说话人的方向,借此粗略估计是哪个玩家在说话,便于想象的话可以理解为类似声纳图(声音我们不涉及)。
读取彩色数据流,可以获得一张1080p的图片(1920*1080)
犹如拍照应用
看SDK自带示例
Color Depth D2D 彩色数据流
和许多输入设备不一样,Kinect 能够产生三维数据,它有红外发射器和摄像头。 Kinect SDK 从红外摄像头获取的红外数据后,对其进行计算处理,然后产生景深影像数据。
深度帧数据中,每个像素占 16 位,即每一个像素占 2 个字节。每一个像素的深度值只占用了 16 个位中的 13 个位。
获取每一个像素的距离很容易,但是要直接使用还需要做一些位 *** 作。如上图所示,深度值存储在第 3 至 15 位中,要获取能够直接使用的深度数据需要向右移位,将游戏者索引(Player Index)位移除
看SDK自带示例
Depth Basics-D2D 深度数据流
0.5-4.5米
25个关节点 每个关节点的 3D空间坐标和转向
看SDK自带示例
Body Basics D2D 骨骼数据流
示例:
Color Depth D2D 彩色数据流
Depth Basics-D2D 深度数据流
Coordinate Mapping Basics 扣出人物,置换背景
Body Basics D2D 骨骼数据流
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)