使用EmguCV处理Kinect数据流

一、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开发入门(十五):进阶指引 上](http://www.cnblogs.com/yangecnu/archive/2012/05/10/KinectSDK_BeyondtheBasic_part1.html)

6、[译]Kinect for Windows SDK开发入门(十五):进阶指引 下](http://www.cnblogs.com/yangecnu/archive/2012/05/15/KinectSDK_BeyondtheBasic_part2.html)

7、ImageExtemsion.cs

8、EmguImageExtension.cs

9、EmguCV与Kinect 函数接口

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值