搞计算机视觉方面的人肯定都知道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)
{
Image<Bgr, byte> image = colorImageFrame.ToOpenCVImage<Bgr, byte>();
Image<Gray,byte> grayImage = image.Convert<Gray,byte>();
CvInvoke.Sobel(grayImage, grayImage, DepthType.Cv8U, 1, 0);
ColorName.Source = grayImage.ToBitmapSource();
}
}
}
三、运行结果
原彩色图像
![这里写图片描述](https://img-blog.csdn.net/20150915122355777)
Sobel边缘检测后的图像
![这里写图片描述](https://img-blog.csdn.net/20150915122434781)
因为时间关系,上述两个运行结果我是分别获取的。当然,我们也可以把两幅图像放到一个界面上。
说明:如果上述有啥疑问也可参考资料4!
参考资料: