Kinect基础之在WinForm(C#)中显示彩色数据和深度数据

程序运行后的结果
这里写图片描述

所需条件:
1、点击下载安装并配置好EmguCv
2、下载并添加以下两个文件
EmguImageExtensions.cs
ImageExtensions.cs

3、安装好Kinect
我用的是VS2012,详细代码如下,点击下载完整工程文件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//以下是需要引用的命名空间
using ImageManipulationExtensionMethods;
using Microsoft.Kinect;
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Emgu.Util;

namespace Kinect基础
{
    public partial class Form1 : Form
    {
        //定义一个KinectSensor对象
        KinectSensor kinectSensor;

        //以下两个布尔变量用来在if语句中控制数据是否显示
        bool blColorIamge = true;
        bool blDepthImage=true;

        public Form1()
        {
            InitializeComponent();
            //调用初始化Kinect的函数
            InitKinect();
        }
        void InitKinect()
        {
            //先通过if语句判断是否有Kinect连接
            if (KinectSensor.KinectSensors.Count > 0)
            {
                //为一开始所定义的kinectSensor对象赋值,这里使用的Linq语句
                kinectSensor = (from sensor in KinectSensor.KinectSensors
                                    where sensor.Status==KinectStatus.Connected
                                    select sensor).FirstOrDefault();

                //定义彩色数据流的格式
                kinectSensor.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);
                //定义深度数据流的格式
                kinectSensor.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30);
                //为AllFrameReady事件委托一个方法,这里+=是C#委托和事件中的知识点
                kinectSensor.AllFramesReady += kinectSensor_AllFramesReady;
                //启动Kinect
                kinectSensor.Start();
            }
        }

        void kinectSensor_AllFramesReady(object sender, AllFramesReadyEventArgs e)
        {
            //这里的using是C#特有的垃圾回收机制
            using (ColorImageFrame colorImageFrame = e.OpenColorImageFrame())
            using (DepthImageFrame depthImageFrame = e.OpenDepthImageFrame())
            {
                //判断彩色数据帧和深度数据帧是否为空
                if (colorImageFrame != null || depthImageFrame != null)
                {
                    //blColorIamge和blDepthImage是布尔变量
                    if (blColorIamge)
                    {
                        pictureBox1.Image = colorImageFrame.ToBitmap();
                    }
                    if (blDepthImage)
                    {
                        pictureBox2.Image = depthImageFrame.ToBitmap();
                    }
                }
            }

        }
        private void btnColorImage_Click(object sender, EventArgs e)
        {
            if (blColorIamge)
            {
                blColorIamge = false;
                //lblColorImage是一个label控件
                lblColorImage.Text = "已关闭彩色数据显示";
            }
            else
            {
                blColorIamge = true;
                lblColorImage.Text = "已开启彩色数据显示";
            }
        }

        private void btnDepthImage_Click(object sender, EventArgs e)
        {
            if (blDepthImage)
            {
                blDepthImage = false;
                //lblDepthImage也是一个label控件
                lblDepthImage.Text = "已关闭深度数据显示";
            }
            else
            {
                blDepthImage = true;
                lblDepthImage.Text = "已开启深度数据显示";
            }
        }
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值