kinect for windows - DepthBasics-D2D 学习笔记一
来源:互联网 发布:数据泄漏防护系统 破解 编辑:程序博客网 时间:2024/04/29 15:30
main函数
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
CDepthBasics application;
application.Run(hInstance, nCmdShow);
}
wWinMain 是Win32程序的入口,wWinMain是unicode版,WinMain是ANSI版。编码不同,如果程序中要有中文,就用wWinMain。
#define _tWinMain wWinMain
#define _tWinMain WinMain
int WINAPI wWinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nShowCmd
);
在不考虑异常处理的情况下,一个简单的Kinect编程模型包含设备对象获取、参数设置、设备启动、时间注册、事件处理及设备关闭等方面。
用KinectSensor.KinectSensors[0]或KinectSensor.FirstOrDefault()获取当前接入的Kinect传感器的对象实例。
KinectSensor.ColorStream.Enable()方法启用视频流;
KinectSensor.DepthStream.Enable()方法启用深度流;
KinectSensor.SkeletonStream.Enable()方法启用骨骼跟踪;
这些方法都有重载参数,用于设定数据流的不用的质量、格式。
KinectSensor.ColorFrameReady来注册彩色图像事件;
KinectSensor.DepthFrameReady来注册深度图像事件;
KinectSensor.SkeletonFrameReady来注册骨骼跟踪事件;
可以使用LINQ的forench语法对当前活动连接的Kinect传感器进行遍历
KinectSensor.KinectSensors.Count 当前Kinect传感器的数量
KinectSensor.KinectSensor[0]选择第一个Kinect设备
aa.AllFrameReady+=new EventHandle<AllFrameReadyEventArgs>(aa_AllFremesReady);注册事件,保证彩色图像、深度图像和骨骼数据同步
三个数据同时使用的时候这样才能同步一致,否则分别注册则会带来数据同步的问题:不同的事件处理程序分属不同的工作线程,无法确保同一时刻各自数据对齐。
针对相关的枚举项可以查看官方文档
彩色图像流处理:BGR32图像的1像素对应4字节(32位),四个字节分别是:B(Blue)、G(Green)、R(Red)和阿尔法通道(代表透明度)
深度图像:1.定义深度图像的有效视角范围 const float MaxDepthDistance 最大视距 const float MinDepthDistance 最小视距 MaxDepthDistanceOffset 前面二者之差
private const int RedIndex =2; private const int GreenIndex=1;BlueIndex=0;
2. 单色直方图计算公式。返回256色灰阶,颜色越黑越远,越白越近。 MaxDepthDistanceOffset 数值控制在0~255范围之内
3.添加显示控件,显示深度图像
4.从深度数据帧转换成彩色图像帧
Kinect与目标物体间的距离公式如下:int depth=rawDepthData[depthIndex]>>DepthImageFrame.PlayerIndexBitmaskWidth; 深度图像的每个像素由两个字节共十六位组成,每个像素的高13位代表从Kinect红外摄像头到最近物体对象的距离,以毫米为单位。低3位字节表示跟踪的用户索引编号,转换为数值类型(0~7),
5.事件处理
6.编译后运行
骨骼跟踪:骨骼跟踪事件注册:aa.SkeletonFrameReady+=new EventHandler<SkeletonFrameReadyEventArgs>(aa.SkeletonFrameReady);
骨骼跟踪事件处理、NUI坐标转换:把Skeleton坐标映射到彩色图像坐标中,并根据图片控件imageCamera做一次等比例适应;
关闭Kinect设备:aa.Stop(); 和 stopKinect();
KinectSensorChooser控件可以进行异常代码处理;
- kinect for windows - DepthBasics-D2D 学习笔记一
- kinect for windows - DepthBasics-D2D详解之一
- kinect for windows - DepthBasics-D2D详解之二
- kinect for windows - DepthBasics-D2D详解之三
- kinect for windows - SkeletonBasics-D2D详解之一
- kinect for windows - SkeletonBasics-D2D详解之二
- Kinect for Windows SDK v2.0 开发笔记 (一)环境
- kinect 学习笔记一
- kinect 学习笔记一
- Kinect学习笔记一ColorFrame
- Kinect for Windows SDK 开发(一)
- Kinect for windows 开发入门 一:基本概念
- KINECT学习 "kinect for Windows SDK开发入门(二)"
- Kinect for Windows SDK
- Kinect for Windows (1)
- Kinect for Windows Samples
- 微软Kinect for windows SDK 使用教程一 (NUI部分)
- 微软Kinect for windows SDK 使用教程一 (NUI部分)
- 参数绑定导致java执行查询sql效率低
- HDU 3466 Proud Merchants
- UITableView--转载
- iOS_21团购_定位并根据经纬度,解析出城市名
- 浅析AngularJS中的$scope.$apply
- kinect for windows - DepthBasics-D2D 学习笔记一
- 浅析c++对象销毁之析构函数
- STL 优先队列(队列+栈) 转载
- 用鼠标获取界面的坐标
- 程序员,你忧伤吗?
- 【IOS】异常捕获 拒绝闪退 让应用从容的崩溃 UncaughtExceptionHandler
- hdoj.1562 Guess the number 20140825
- HDU 1326 Box of Bricks
- 智能灯开发第三周