C# kinect v2学习笔记(四) 深度图像

        很久没来写简单教程了,不是我懒,好吧,我承认有点懒!不过真的很忙,而且最近安排的又换方向了,你说我刚入点门,想深入学习呢,目前要去做点硬件的事,没办法只能去补脑了!

         今天的带来的深度图像,很简单,步骤还是那么几步:1.获取体感设备;2.图像帧初始化;3.帧描述;4.帧触发事件;5. 创立一个位图显示采集的影像。红外彩色深度其实都差不了多少,特别是彩色和深度,你会发现代码没变化一样。

       好了,基础还是要讲完的,虽然一样,但是重复做才能记得熟,程序员本来大多就是在做一个循环的过程,下次开始我会坚持写点好玩的,不定期的放上我的一些有趣的小Demo,以后也会尽量写一些其它的,比如我最近学习的硬件的一些知识,当是给自己加个记忆,一分享一下解决遇到的问题!

       放代码了:

       变量的设置:

//体感器设备
        private KinectSensor kinectDevice;

        //深度帧读取变量
        private DepthFrameReader depthFrameReader;
        //深度帧描述
        private FrameDescription depthFrameDesription;

        //位图对象
        private WriteableBitmap depthBitmap;
        //存放一帧深度图像的矩形框
        private Int32Rect depthBitmapRect;
        //深度像素数组转化为矩形框的长度
        private int depthStride;
        //深度图像像素数据
        private ushort[] depthPixelData;

            主程序代码:(简直和彩色数据一模一样,color换成了depth,存储格式变了而已)

InitializeComponent();
            //获取默认的连接的体感器
            this.kinectDevice = KinectSensor.GetDefault();

            //深度图像变量初始化
            this.depthFrameReader = this.kinectDevice.DepthFrameSource.OpenReader();
            //深度帧描述,宽度和高度
            this.depthFrameDesription = this.kinectDevice.DepthFrameSource.FrameDescription; 
            //触发深度帧事件
            this.depthFrameReader.FrameArrived += _DepthFrameReader_FrameArrived;

            //位图初始化,宽度,高度,96.0表示分辨率,像素格式
            this.depthBitmap = new WriteableBitmap(this.depthFrameDesription.Width, this.depthFrameDesription.Height, 96.0, 96.0, PixelFormats.Gray16, null);
            //存放图像像素的矩形框
            this.depthBitmapRect = new Int32Rect(0, 0, this.depthBitmap.PixelWidth, this.depthBitmap.PixelHeight);
            //存放深度图像的字节数组的长度=帧宽度*帧高度
            this.depthPixelData = new ushort[this.depthFrameDesription.LengthInPixels];           //取代宽度*高度,更加方便

            //步长:宽度*2字节/像素
            this.depthStride = this.depthFrameDesription.Width * 2;
            //显示影像
            depthImage.Source = this.depthBitmap;

            this.kinectDevice.Open();

体感器的处理事件:

 void _DepthFrameReader_FrameArrived(object sender, DepthFrameArrivedEventArgs e)
        {
            //获取一帧深度图像
            using (DepthFrame depthFrame = e.FrameReference.AcquireFrame())
            {
                //如果获取成功
                if (depthFrame != null)
                {
                    //将深度帧数据存放在字节数组里面
                    depthFrame.CopyFrameDataToArray(this.depthPixelData);

                    //将数组的像素写入矩形框,渲染位图。
                    this.depthBitmap.WritePixels(this.depthBitmapRect, this.depthPixelData, this.depthStride,0);
                }
            }
        }
效果如下:

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值