程序运行后的结果
所需条件:
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 = "已开启深度数据显示";
}
}
}
}