您的位置:首页 > 其它

使用EmguCV处理Kinect数据流

2015-09-15 12:31 555 查看

一、OpenCVEmguCV等相关简介

搞计算机视觉方面的人肯定都知道OpenCV——Intel公司在1999年发起的一个项目,它将一些高级的视觉研究成果加入到OpenCV库中并开源贡献给了全世界。其本身使用C/C++写的,不过对于那些习惯了用C#的人来说,直接用OpenCV的话可能不放便。不过幸好,2008年,一个名为Willow Garage的科技孵化公司负责对该项目的更新和维护。几乎同时EmguCV项目开始发起,他提供了对OpenCV的.Net包装,使得我们在.Net环境下能够使用OpenCV库中的函数。

既然EmguCV这么好用,那么我们如何才能将其用到Kinect中,用来处理Kinect的数据流(本文主要指彩色数据)呢????

幸好,有人已帮我们写好了二者的接口函数,如参考资料7、8(来源自4)所示,7、8可能翻墙才能下载下来,9是我自己根据5、6整理的。

二、EmguCV在Kinect中的使用

开始本小节的前提是:

1)已能够熟练获取Kinect的彩色数据流;

2)已准备好参考资料7、8两个接口函数。

1、将类“ImageExtemsion.cs”和“EmguImageExtension.cs”添加到你的工程中去。

2、在你的源码中添加命名空间的引用:

using ImageManipulationExtensionMethods;


3、开始使用EmguCV

private void kinectSensor_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
{
using (ColorImageFrame colorImageFrame = e.OpenColorImageFrame())
{
if (colorImageFrame != null)
{
/*
//*********************使用Kinect的函数显示彩色数据流************************
//1、用来存储彩色像素的数组(BGRA BGRA BGRA BGRA BGRA)
colorPixelData = new byte[colorImageFrame.PixelDataLength];
//2、把彩色数据帧中的彩色像素复制到:colorPixelData
colorImageFrame.CopyPixelDataTo(colorPixelData);
//3、将彩色像素数据赋给画布上Name=ColorName的Image元素
ColorName.Source =
BitmapSource.Create(colorImageFrame.Width, colorImageFrame.Height, 96, 96,
PixelFormats.Bgr32, null, colorPixelData, colorImageFrame.Width * 4);
*/
//*********************使用EmguCV处理Kinect彩色数据流**************************
//1、将彩色数据帧(colorImageFrame)转化为EmguCV可以处理的数据类型(Image<Bgr, byte>)
Image<Bgr, byte> image = colorImageFrame.ToOpenCVImage<Bgr, byte>();
//2、彩色图像转为灰色图像
Image<Gray,byte> grayImage = image.Convert<Gray,byte>();
//3、Sobel边缘检测
CvInvoke.Sobel(grayImage, grayImage, DepthType.Cv8U, 1, 0);
//4、调用函数进行类型转化
ColorName.Source = grayImage.ToBitmapSource();
}
}
}


三、运行结果

原彩色图像



Sobel边缘检测后的图像



因为时间关系,上述两个运行结果我是分别获取的。当然,我们也可以把两幅图像放到一个界面上。

说明:如果上述有啥疑问也可参考资料4!

参考资料:

1、OpenCV官网

2、OpenCV中文论坛

3、EmguCV官网

4、[EmguCV/KinectSDK] WPF使用EmguCV讀取KinectSDK做影像處理

5、[译]Kinect for Windows SDK开发入门(十五):进阶指引 上](/article/4778037.html)

6、[译]Kinect for Windows SDK开发入门(十五):进阶指引 下](/article/4778038.html)

7、ImageExtemsion.cs

8、EmguImageExtension.cs

9、EmguCV与Kinect 函数接口

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: